mirror of
https://github.com/blawar/GLideN64.git
synced 2024-07-07 03:13:49 +00:00
Start Graphics content implementation. First step: init , destroy , createTexture, deleteTexture
This commit is contained in:
parent
599f7b1e93
commit
365b116c57
|
@ -301,6 +301,9 @@
|
||||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_mupenplus|Win32'">true</ExcludedFromBuild>
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_mupenplus|Win32'">true</ExcludedFromBuild>
|
||||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug_mupenplus|Win32'">true</ExcludedFromBuild>
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug_mupenplus|Win32'">true</ExcludedFromBuild>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\src\Graphics\Context.cpp" />
|
||||||
|
<ClCompile Include="..\..\src\Graphics\OpenGLContext\GLFunctions.cpp" />
|
||||||
|
<ClCompile Include="..\..\src\Graphics\OpenGLContext\OpenGLContextImpl.cpp" />
|
||||||
<ClCompile Include="..\..\src\gSP.cpp" />
|
<ClCompile Include="..\..\src\gSP.cpp" />
|
||||||
<ClCompile Include="..\..\src\Keys.cpp" />
|
<ClCompile Include="..\..\src\Keys.cpp" />
|
||||||
<ClCompile Include="..\..\src\Log.cpp" />
|
<ClCompile Include="..\..\src\Log.cpp" />
|
||||||
|
@ -421,6 +424,11 @@
|
||||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_mupenplus|Win32'">true</ExcludedFromBuild>
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_mupenplus|Win32'">true</ExcludedFromBuild>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\src\Graphics\Context.h" />
|
||||||
|
<ClInclude Include="..\..\src\Graphics\ContextImpl.h" />
|
||||||
|
<ClInclude Include="..\..\src\Graphics\ObjectName.h" />
|
||||||
|
<ClInclude Include="..\..\src\Graphics\OpenGLContext\GLFunctions.h" />
|
||||||
|
<ClInclude Include="..\..\src\Graphics\OpenGLContext\OpenGLContextImpl.h" />
|
||||||
<ClInclude Include="..\..\src\gSP.h" />
|
<ClInclude Include="..\..\src\gSP.h" />
|
||||||
<ClInclude Include="..\..\src\inc\glext.h" />
|
<ClInclude Include="..\..\src\inc\glext.h" />
|
||||||
<ClInclude Include="..\..\src\Keys.h" />
|
<ClInclude Include="..\..\src\Keys.h" />
|
||||||
|
|
|
@ -57,6 +57,18 @@
|
||||||
<Filter Include="Header Files\common">
|
<Filter Include="Header Files\common">
|
||||||
<UniqueIdentifier>{699714e2-bd52-4b7d-a5d5-4e514651293f}</UniqueIdentifier>
|
<UniqueIdentifier>{699714e2-bd52-4b7d-a5d5-4e514651293f}</UniqueIdentifier>
|
||||||
</Filter>
|
</Filter>
|
||||||
|
<Filter Include="Header Files\Graphics">
|
||||||
|
<UniqueIdentifier>{ed46d297-e09c-4187-870c-1f03bc54905f}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Source Files\Graphics">
|
||||||
|
<UniqueIdentifier>{abdc978d-26cb-4c32-9b72-4c92b05f9e24}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Header Files\Graphics\OpenGL">
|
||||||
|
<UniqueIdentifier>{ac45d108-eb77-4831-b7aa-5efa9e48d4ec}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Source Files\Graphics\OpenGL">
|
||||||
|
<UniqueIdentifier>{207de069-1088-4913-84f5-3cf0804928dc}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\..\src\Combiner.cpp">
|
<ClCompile Include="..\..\src\Combiner.cpp">
|
||||||
|
@ -266,6 +278,15 @@
|
||||||
<ClCompile Include="..\..\src\F3DBETA.cpp">
|
<ClCompile Include="..\..\src\F3DBETA.cpp">
|
||||||
<Filter>Source Files\uCodes</Filter>
|
<Filter>Source Files\uCodes</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\src\Graphics\Context.cpp">
|
||||||
|
<Filter>Source Files\Graphics</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\src\Graphics\OpenGLContext\OpenGLContextImpl.cpp">
|
||||||
|
<Filter>Source Files\Graphics\OpenGL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\src\Graphics\OpenGLContext\GLFunctions.cpp">
|
||||||
|
<Filter>Source Files\Graphics\OpenGL</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\src\3DMath.h">
|
<ClInclude Include="..\..\src\3DMath.h">
|
||||||
|
@ -475,5 +496,20 @@
|
||||||
<ClInclude Include="..\..\src\F3DBETA.h">
|
<ClInclude Include="..\..\src\F3DBETA.h">
|
||||||
<Filter>Header Files\uCodes</Filter>
|
<Filter>Header Files\uCodes</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\src\Graphics\ContextImpl.h">
|
||||||
|
<Filter>Header Files\Graphics</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\src\Graphics\Context.h">
|
||||||
|
<Filter>Header Files\Graphics</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\src\Graphics\OpenGLContext\OpenGLContextImpl.h">
|
||||||
|
<Filter>Header Files\Graphics\OpenGL</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\src\Graphics\OpenGLContext\GLFunctions.h">
|
||||||
|
<Filter>Header Files\Graphics\OpenGL</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\src\Graphics\ObjectName.h">
|
||||||
|
<Filter>Header Files\Graphics</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
34
src/Graphics/Context.cpp
Normal file
34
src/Graphics/Context.cpp
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
#include "Context.h"
|
||||||
|
#include "OpenGLContext/OpenGLContextImpl.h"
|
||||||
|
|
||||||
|
using namespace graphics;
|
||||||
|
|
||||||
|
Context gfxContext;
|
||||||
|
|
||||||
|
Context::Context() : m_impl(nullptr) {}
|
||||||
|
|
||||||
|
Context::~Context() {
|
||||||
|
m_impl.reset(nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Context::init()
|
||||||
|
{
|
||||||
|
m_impl.reset(new opengl::OpenGLContextImpl);
|
||||||
|
m_impl->init();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Context::destroy()
|
||||||
|
{
|
||||||
|
m_impl->destroy();
|
||||||
|
m_impl.reset(nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
ObjectName Context::createTexture() const
|
||||||
|
{
|
||||||
|
return m_impl->createTexture();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Context::deleteTexture(ObjectName _name) const
|
||||||
|
{
|
||||||
|
return m_impl->deleteTexture(_name);
|
||||||
|
}
|
27
src/Graphics/Context.h
Normal file
27
src/Graphics/Context.h
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
#include "ObjectName.h"
|
||||||
|
|
||||||
|
namespace graphics {
|
||||||
|
|
||||||
|
class ContextImpl;
|
||||||
|
|
||||||
|
class Context
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Context();
|
||||||
|
~Context();
|
||||||
|
void init();
|
||||||
|
void destroy();
|
||||||
|
|
||||||
|
ObjectName createTexture() const;
|
||||||
|
void deleteTexture(ObjectName _name) const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::unique_ptr<ContextImpl> m_impl;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
extern graphics::Context gfxContext;
|
16
src/Graphics/ContextImpl.h
Normal file
16
src/Graphics/ContextImpl.h
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
#pragma once
|
||||||
|
#include "ObjectName.h"
|
||||||
|
|
||||||
|
namespace graphics {
|
||||||
|
|
||||||
|
class ContextImpl
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual ~ContextImpl() {}
|
||||||
|
virtual void init() = 0;
|
||||||
|
virtual void destroy() = 0;
|
||||||
|
virtual ObjectName createTexture() const = 0;
|
||||||
|
virtual void deleteTexture(ObjectName _name) const = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
16
src/Graphics/ObjectName.h
Normal file
16
src/Graphics/ObjectName.h
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
#pragma once
|
||||||
|
#include <Types.h>
|
||||||
|
|
||||||
|
namespace graphics {
|
||||||
|
|
||||||
|
class ObjectName
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit ObjectName(u32 _name) : m_name(_name) {}
|
||||||
|
explicit operator u32() const { return m_name; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
u32 m_name;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
174
src/Graphics/OpenGLContext/GLFunctions.cpp
Normal file
174
src/Graphics/OpenGLContext/GLFunctions.cpp
Normal file
|
@ -0,0 +1,174 @@
|
||||||
|
#include "GLFunctions.h"
|
||||||
|
|
||||||
|
#ifdef OS_WINDOWS
|
||||||
|
#define glGetProcAddress wglGetProcAddress
|
||||||
|
#else
|
||||||
|
#define glGetProcAddress glXGetProcAddress
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// GLSL functions
|
||||||
|
PFNGLCREATESHADERPROC glCreateShader;
|
||||||
|
PFNGLCOMPILESHADERPROC glCompileShader;
|
||||||
|
PFNGLSHADERSOURCEPROC glShaderSource;
|
||||||
|
PFNGLCREATEPROGRAMPROC glCreateProgram;
|
||||||
|
PFNGLATTACHSHADERPROC glAttachShader;
|
||||||
|
PFNGLLINKPROGRAMPROC glLinkProgram;
|
||||||
|
PFNGLUSEPROGRAMPROC glUseProgram;
|
||||||
|
PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation;
|
||||||
|
PFNGLUNIFORM1IPROC glUniform1i;
|
||||||
|
PFNGLUNIFORM1FPROC glUniform1f;
|
||||||
|
PFNGLUNIFORM2FPROC glUniform2f;
|
||||||
|
PFNGLUNIFORM2IPROC glUniform2i;
|
||||||
|
PFNGLUNIFORM4IPROC glUniform4i;
|
||||||
|
PFNGLUNIFORM4FPROC glUniform4f;
|
||||||
|
PFNGLUNIFORM3FVPROC glUniform3fv;
|
||||||
|
PFNGLUNIFORM4FVPROC glUniform4fv;
|
||||||
|
PFNGLDETACHSHADERPROC glDetachShader;
|
||||||
|
PFNGLDELETESHADERPROC glDeleteShader;
|
||||||
|
PFNGLDELETEPROGRAMPROC glDeleteProgram;
|
||||||
|
PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog;
|
||||||
|
PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog;
|
||||||
|
PFNGLGETSHADERIVPROC glGetShaderiv;
|
||||||
|
PFNGLGETPROGRAMIVPROC glGetProgramiv;
|
||||||
|
|
||||||
|
PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray;
|
||||||
|
PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray;
|
||||||
|
PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer;
|
||||||
|
PFNGLBINDATTRIBLOCATIONPROC glBindAttribLocation;
|
||||||
|
PFNGLVERTEXATTRIB4FPROC glVertexAttrib4f;
|
||||||
|
PFNGLVERTEXATTRIB4FVPROC glVertexAttrib4fv;
|
||||||
|
|
||||||
|
// multitexture functions
|
||||||
|
PFNGLACTIVETEXTUREPROC glActiveTexture;
|
||||||
|
PFNGLDEPTHRANGEFPROC glDepthRangef;
|
||||||
|
PFNGLCLEARDEPTHFPROC glClearDepthf;
|
||||||
|
PFNGLBLENDCOLORPROC glBlendColor;
|
||||||
|
|
||||||
|
PFNGLDRAWBUFFERSPROC glDrawBuffers;
|
||||||
|
PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer;
|
||||||
|
PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers;
|
||||||
|
PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers;
|
||||||
|
PFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D;
|
||||||
|
PFNGLTEXIMAGE2DMULTISAMPLEPROC glTexImage2DMultisample;
|
||||||
|
PFNGLTEXSTORAGE2DMULTISAMPLEPROC glTexStorage2DMultisample;
|
||||||
|
PFNGLGENRENDERBUFFERSPROC glGenRenderbuffers;
|
||||||
|
PFNGLBINDRENDERBUFFERPROC glBindRenderbuffer;
|
||||||
|
PFNGLRENDERBUFFERSTORAGEPROC glRenderbufferStorage;
|
||||||
|
PFNGLFRAMEBUFFERRENDERBUFFERPROC glFramebufferRenderbuffer;
|
||||||
|
PFNGLDELETERENDERBUFFERSPROC glDeleteRenderbuffers;
|
||||||
|
PFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus;
|
||||||
|
PFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer;
|
||||||
|
PFNGLGENBUFFERSPROC glGenBuffers;
|
||||||
|
PFNGLBINDBUFFERPROC glBindBuffer;
|
||||||
|
PFNGLBUFFERDATAPROC glBufferData;
|
||||||
|
PFNGLMAPBUFFERPROC glMapBuffer;
|
||||||
|
PFNGLMAPBUFFERRANGEPROC glMapBufferRange;
|
||||||
|
PFNGLUNMAPBUFFERPROC glUnmapBuffer;
|
||||||
|
PFNGLDELETEBUFFERSPROC glDeleteBuffers;
|
||||||
|
PFNGLBINDIMAGETEXTUREPROC glBindImageTexture;
|
||||||
|
PFNGLMEMORYBARRIERPROC glMemoryBarrier;
|
||||||
|
PFNGLGETSTRINGIPROC glGetStringi;
|
||||||
|
PFNGLINVALIDATEFRAMEBUFFERPROC glInvalidateFramebuffer;
|
||||||
|
PFNGLBUFFERSTORAGEPROC glBufferStorage;
|
||||||
|
PFNGLFENCESYNCPROC glFenceSync;
|
||||||
|
PFNGLCLIENTWAITSYNCPROC glClientWaitSync;
|
||||||
|
PFNGLDELETESYNCPROC glDeleteSync;
|
||||||
|
|
||||||
|
PFNGLGETUNIFORMBLOCKINDEXPROC glGetUniformBlockIndex;
|
||||||
|
PFNGLUNIFORMBLOCKBINDINGPROC glUniformBlockBinding;
|
||||||
|
PFNGLGETACTIVEUNIFORMBLOCKIVPROC glGetActiveUniformBlockiv;
|
||||||
|
PFNGLGETUNIFORMINDICESPROC glGetUniformIndices;
|
||||||
|
PFNGLGETACTIVEUNIFORMSIVPROC glGetActiveUniformsiv;
|
||||||
|
PFNGLBINDBUFFERBASEPROC glBindBufferBase;
|
||||||
|
PFNGLBUFFERSUBDATAPROC glBufferSubData;
|
||||||
|
|
||||||
|
PFNGLGETPROGRAMBINARYPROC glGetProgramBinary;
|
||||||
|
PFNGLPROGRAMBINARYPROC glProgramBinary;
|
||||||
|
PFNGLPROGRAMPARAMETERIPROC glProgramParameteri;
|
||||||
|
|
||||||
|
PFNGLTEXSTORAGE2DPROC glTexStorage2D;
|
||||||
|
|
||||||
|
#define GL_GET_PROC_ADR(proc_type, proc_name) proc_name = (proc_type) glGetProcAddress(#proc_name)
|
||||||
|
|
||||||
|
void initGLFunctions()
|
||||||
|
{
|
||||||
|
GL_GET_PROC_ADR(PFNGLCREATESHADERPROC, glCreateShader);
|
||||||
|
GL_GET_PROC_ADR(PFNGLCOMPILESHADERPROC, glCompileShader);
|
||||||
|
GL_GET_PROC_ADR(PFNGLSHADERSOURCEPROC, glShaderSource);
|
||||||
|
GL_GET_PROC_ADR(PFNGLCREATEPROGRAMPROC, glCreateProgram);
|
||||||
|
GL_GET_PROC_ADR(PFNGLATTACHSHADERPROC, glAttachShader);
|
||||||
|
GL_GET_PROC_ADR(PFNGLLINKPROGRAMPROC, glLinkProgram);
|
||||||
|
GL_GET_PROC_ADR(PFNGLUSEPROGRAMPROC, glUseProgram);
|
||||||
|
GL_GET_PROC_ADR(PFNGLGETUNIFORMLOCATIONPROC, glGetUniformLocation);
|
||||||
|
GL_GET_PROC_ADR(PFNGLUNIFORM1IPROC, glUniform1i);
|
||||||
|
GL_GET_PROC_ADR(PFNGLUNIFORM1FPROC, glUniform1f);
|
||||||
|
GL_GET_PROC_ADR(PFNGLUNIFORM2FPROC, glUniform2f);
|
||||||
|
GL_GET_PROC_ADR(PFNGLUNIFORM2IPROC, glUniform2i);
|
||||||
|
GL_GET_PROC_ADR(PFNGLUNIFORM4IPROC, glUniform4i);
|
||||||
|
GL_GET_PROC_ADR(PFNGLUNIFORM4FPROC, glUniform4f);
|
||||||
|
GL_GET_PROC_ADR(PFNGLUNIFORM3FVPROC, glUniform3fv);
|
||||||
|
GL_GET_PROC_ADR(PFNGLUNIFORM4FVPROC, glUniform4fv);
|
||||||
|
GL_GET_PROC_ADR(PFNGLDETACHSHADERPROC, glDetachShader);
|
||||||
|
GL_GET_PROC_ADR(PFNGLDELETESHADERPROC, glDeleteShader);
|
||||||
|
GL_GET_PROC_ADR(PFNGLDELETEPROGRAMPROC, glDeleteProgram);
|
||||||
|
GL_GET_PROC_ADR(PFNGLGETPROGRAMINFOLOGPROC, glGetProgramInfoLog);
|
||||||
|
GL_GET_PROC_ADR(PFNGLGETSHADERINFOLOGPROC, glGetShaderInfoLog);
|
||||||
|
GL_GET_PROC_ADR(PFNGLGETSHADERIVPROC, glGetShaderiv);
|
||||||
|
GL_GET_PROC_ADR(PFNGLGETPROGRAMIVPROC, glGetProgramiv);
|
||||||
|
|
||||||
|
GL_GET_PROC_ADR(PFNGLENABLEVERTEXATTRIBARRAYPROC, glEnableVertexAttribArray);
|
||||||
|
GL_GET_PROC_ADR(PFNGLDISABLEVERTEXATTRIBARRAYPROC, glDisableVertexAttribArray);
|
||||||
|
GL_GET_PROC_ADR(PFNGLVERTEXATTRIBPOINTERPROC, glVertexAttribPointer);
|
||||||
|
GL_GET_PROC_ADR(PFNGLBINDATTRIBLOCATIONPROC, glBindAttribLocation);
|
||||||
|
GL_GET_PROC_ADR(PFNGLVERTEXATTRIB4FPROC, glVertexAttrib4f);
|
||||||
|
GL_GET_PROC_ADR(PFNGLVERTEXATTRIB4FVPROC, glVertexAttrib4fv);
|
||||||
|
|
||||||
|
GL_GET_PROC_ADR(PFNGLACTIVETEXTUREPROC, glActiveTexture);
|
||||||
|
GL_GET_PROC_ADR(PFNGLDEPTHRANGEFPROC, glDepthRangef);
|
||||||
|
GL_GET_PROC_ADR(PFNGLCLEARDEPTHFPROC, glClearDepthf);
|
||||||
|
GL_GET_PROC_ADR(PFNGLBLENDCOLORPROC, glBlendColor);
|
||||||
|
|
||||||
|
GL_GET_PROC_ADR(PFNGLDRAWBUFFERSPROC, glDrawBuffers);
|
||||||
|
GL_GET_PROC_ADR(PFNGLBINDFRAMEBUFFERPROC, glBindFramebuffer);
|
||||||
|
GL_GET_PROC_ADR(PFNGLDELETEFRAMEBUFFERSPROC, glDeleteFramebuffers);
|
||||||
|
GL_GET_PROC_ADR(PFNGLGENFRAMEBUFFERSPROC, glGenFramebuffers);
|
||||||
|
GL_GET_PROC_ADR(PFNGLFRAMEBUFFERTEXTURE2DPROC, glFramebufferTexture2D);
|
||||||
|
GL_GET_PROC_ADR(PFNGLTEXIMAGE2DMULTISAMPLEPROC, glTexImage2DMultisample);
|
||||||
|
GL_GET_PROC_ADR(PFNGLTEXSTORAGE2DMULTISAMPLEPROC, glTexStorage2DMultisample);
|
||||||
|
GL_GET_PROC_ADR(PFNGLGENRENDERBUFFERSPROC, glGenRenderbuffers);
|
||||||
|
GL_GET_PROC_ADR(PFNGLBINDRENDERBUFFERPROC, glBindRenderbuffer);
|
||||||
|
GL_GET_PROC_ADR(PFNGLRENDERBUFFERSTORAGEPROC, glRenderbufferStorage);
|
||||||
|
GL_GET_PROC_ADR(PFNGLFRAMEBUFFERRENDERBUFFERPROC, glFramebufferRenderbuffer);
|
||||||
|
GL_GET_PROC_ADR(PFNGLDELETERENDERBUFFERSPROC, glDeleteRenderbuffers);
|
||||||
|
GL_GET_PROC_ADR(PFNGLCHECKFRAMEBUFFERSTATUSPROC, glCheckFramebufferStatus);
|
||||||
|
GL_GET_PROC_ADR(PFNGLBLITFRAMEBUFFERPROC, glBlitFramebuffer);
|
||||||
|
GL_GET_PROC_ADR(PFNGLGENBUFFERSPROC, glGenBuffers);
|
||||||
|
GL_GET_PROC_ADR(PFNGLBINDBUFFERPROC, glBindBuffer);
|
||||||
|
GL_GET_PROC_ADR(PFNGLBUFFERDATAPROC, glBufferData);
|
||||||
|
GL_GET_PROC_ADR(PFNGLMAPBUFFERPROC, glMapBuffer);
|
||||||
|
GL_GET_PROC_ADR(PFNGLMAPBUFFERRANGEPROC, glMapBufferRange);
|
||||||
|
GL_GET_PROC_ADR(PFNGLUNMAPBUFFERPROC, glUnmapBuffer);
|
||||||
|
GL_GET_PROC_ADR(PFNGLDELETEBUFFERSPROC, glDeleteBuffers);
|
||||||
|
GL_GET_PROC_ADR(PFNGLBINDIMAGETEXTUREPROC, glBindImageTexture);
|
||||||
|
GL_GET_PROC_ADR(PFNGLMEMORYBARRIERPROC, glMemoryBarrier);
|
||||||
|
GL_GET_PROC_ADR(PFNGLGETSTRINGIPROC, glGetStringi);
|
||||||
|
GL_GET_PROC_ADR(PFNGLINVALIDATEFRAMEBUFFERPROC, glInvalidateFramebuffer);
|
||||||
|
GL_GET_PROC_ADR(PFNGLBUFFERSTORAGEPROC, glBufferStorage);
|
||||||
|
GL_GET_PROC_ADR(PFNGLFENCESYNCPROC, glFenceSync);
|
||||||
|
GL_GET_PROC_ADR(PFNGLCLIENTWAITSYNCPROC, glClientWaitSync);
|
||||||
|
GL_GET_PROC_ADR(PFNGLDELETESYNCPROC, glDeleteSync);
|
||||||
|
|
||||||
|
GL_GET_PROC_ADR(PFNGLGETUNIFORMBLOCKINDEXPROC, glGetUniformBlockIndex);
|
||||||
|
GL_GET_PROC_ADR(PFNGLUNIFORMBLOCKBINDINGPROC, glUniformBlockBinding);
|
||||||
|
GL_GET_PROC_ADR(PFNGLGETACTIVEUNIFORMBLOCKIVPROC, glGetActiveUniformBlockiv);
|
||||||
|
GL_GET_PROC_ADR(PFNGLGETUNIFORMINDICESPROC, glGetUniformIndices);
|
||||||
|
GL_GET_PROC_ADR(PFNGLGETACTIVEUNIFORMSIVPROC, glGetActiveUniformsiv);
|
||||||
|
GL_GET_PROC_ADR(PFNGLBINDBUFFERBASEPROC, glBindBufferBase);
|
||||||
|
GL_GET_PROC_ADR(PFNGLBUFFERSUBDATAPROC, glBufferSubData);
|
||||||
|
|
||||||
|
GL_GET_PROC_ADR(PFNGLGETPROGRAMBINARYPROC, glGetProgramBinary);
|
||||||
|
GL_GET_PROC_ADR(PFNGLPROGRAMBINARYPROC, glProgramBinary);
|
||||||
|
GL_GET_PROC_ADR(PFNGLPROGRAMPARAMETERIPROC, glProgramParameteri);
|
||||||
|
|
||||||
|
GL_GET_PROC_ADR(PFNGLTEXSTORAGE2DPROC, glTexStorage2D);
|
||||||
|
}
|
96
src/Graphics/OpenGLContext/GLFunctions.h
Normal file
96
src/Graphics/OpenGLContext/GLFunctions.h
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
#ifndef GLFUNCTIONS_H
|
||||||
|
#define GLFUNCTIONS_H
|
||||||
|
|
||||||
|
#ifdef OS_WINDOWS
|
||||||
|
#include <windows.h>
|
||||||
|
#else
|
||||||
|
#include >winlnxdefs.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <GL/gl.h>
|
||||||
|
#include <GL/glext.h>
|
||||||
|
|
||||||
|
extern PFNGLCREATESHADERPROC glCreateShader;
|
||||||
|
extern PFNGLCOMPILESHADERPROC glCompileShader;
|
||||||
|
extern PFNGLSHADERSOURCEPROC glShaderSource;
|
||||||
|
extern PFNGLCREATEPROGRAMPROC glCreateProgram;
|
||||||
|
extern PFNGLATTACHSHADERPROC glAttachShader;
|
||||||
|
extern PFNGLLINKPROGRAMPROC glLinkProgram;
|
||||||
|
extern PFNGLUSEPROGRAMPROC glUseProgram;
|
||||||
|
extern PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation;
|
||||||
|
extern PFNGLUNIFORM1IPROC glUniform1i;
|
||||||
|
extern PFNGLUNIFORM1FPROC glUniform1f;
|
||||||
|
extern PFNGLUNIFORM2FPROC glUniform2f;
|
||||||
|
extern PFNGLUNIFORM2IPROC glUniform2i;
|
||||||
|
extern PFNGLUNIFORM4IPROC glUniform4i;
|
||||||
|
|
||||||
|
extern PFNGLUNIFORM4FPROC glUniform4f;
|
||||||
|
extern PFNGLUNIFORM3FVPROC glUniform3fv;
|
||||||
|
extern PFNGLUNIFORM4FVPROC glUniform4fv;
|
||||||
|
extern PFNGLDETACHSHADERPROC glDetachShader;
|
||||||
|
extern PFNGLDELETESHADERPROC glDeleteShader;
|
||||||
|
extern PFNGLDELETEPROGRAMPROC glDeleteProgram;
|
||||||
|
extern PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog;
|
||||||
|
extern PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog;
|
||||||
|
extern PFNGLGETSHADERIVPROC glGetShaderiv;
|
||||||
|
extern PFNGLGETPROGRAMIVPROC glGetProgramiv;
|
||||||
|
|
||||||
|
extern PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray;
|
||||||
|
extern PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray;
|
||||||
|
extern PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer;
|
||||||
|
extern PFNGLBINDATTRIBLOCATIONPROC glBindAttribLocation;
|
||||||
|
extern PFNGLVERTEXATTRIB4FPROC glVertexAttrib4f;
|
||||||
|
extern PFNGLVERTEXATTRIB4FVPROC glVertexAttrib4fv;
|
||||||
|
|
||||||
|
extern PFNGLACTIVETEXTUREPROC glActiveTexture;
|
||||||
|
extern PFNGLDEPTHRANGEFPROC glDepthRangef;
|
||||||
|
extern PFNGLCLEARDEPTHFPROC glClearDepthf;
|
||||||
|
extern PFNGLBLENDCOLORPROC glBlendColor;
|
||||||
|
|
||||||
|
extern PFNGLDRAWBUFFERSPROC glDrawBuffers;
|
||||||
|
extern PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers;
|
||||||
|
extern PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer;
|
||||||
|
extern PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers;
|
||||||
|
extern PFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D;
|
||||||
|
extern PFNGLTEXIMAGE2DMULTISAMPLEPROC glTexImage2DMultisample;
|
||||||
|
extern PFNGLTEXSTORAGE2DMULTISAMPLEPROC glTexStorage2DMultisample;
|
||||||
|
extern PFNGLGENRENDERBUFFERSPROC glGenRenderbuffers;
|
||||||
|
extern PFNGLBINDRENDERBUFFERPROC glBindRenderbuffer;
|
||||||
|
extern PFNGLRENDERBUFFERSTORAGEPROC glRenderbufferStorage;
|
||||||
|
extern PFNGLDELETERENDERBUFFERSPROC glDeleteRenderbuffers;
|
||||||
|
extern PFNGLFRAMEBUFFERRENDERBUFFERPROC glFramebufferRenderbuffer;
|
||||||
|
extern PFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus;
|
||||||
|
extern PFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer;
|
||||||
|
extern PFNGLGENBUFFERSPROC glGenBuffers;
|
||||||
|
extern PFNGLBINDBUFFERPROC glBindBuffer;
|
||||||
|
extern PFNGLBUFFERDATAPROC glBufferData;
|
||||||
|
extern PFNGLMAPBUFFERPROC glMapBuffer;
|
||||||
|
extern PFNGLMAPBUFFERRANGEPROC glMapBufferRange;
|
||||||
|
extern PFNGLUNMAPBUFFERPROC glUnmapBuffer;
|
||||||
|
extern PFNGLDELETEBUFFERSPROC glDeleteBuffers;
|
||||||
|
extern PFNGLBINDIMAGETEXTUREPROC glBindImageTexture;
|
||||||
|
extern PFNGLMEMORYBARRIERPROC glMemoryBarrier;
|
||||||
|
extern PFNGLGETSTRINGIPROC glGetStringi;
|
||||||
|
extern PFNGLINVALIDATEFRAMEBUFFERPROC glInvalidateFramebuffer;
|
||||||
|
extern PFNGLBUFFERSTORAGEPROC glBufferStorage;
|
||||||
|
extern PFNGLFENCESYNCPROC glFenceSync;
|
||||||
|
extern PFNGLCLIENTWAITSYNCPROC glClientWaitSync;
|
||||||
|
extern PFNGLDELETESYNCPROC glDeleteSync;
|
||||||
|
|
||||||
|
extern PFNGLGETUNIFORMBLOCKINDEXPROC glGetUniformBlockIndex;
|
||||||
|
extern PFNGLUNIFORMBLOCKBINDINGPROC glUniformBlockBinding;
|
||||||
|
extern PFNGLGETACTIVEUNIFORMBLOCKIVPROC glGetActiveUniformBlockiv;
|
||||||
|
extern PFNGLGETUNIFORMINDICESPROC glGetUniformIndices;
|
||||||
|
extern PFNGLGETACTIVEUNIFORMSIVPROC glGetActiveUniformsiv;
|
||||||
|
extern PFNGLBINDBUFFERBASEPROC glBindBufferBase;
|
||||||
|
extern PFNGLBUFFERSUBDATAPROC glBufferSubData;
|
||||||
|
|
||||||
|
extern PFNGLGETPROGRAMBINARYPROC glGetProgramBinary;
|
||||||
|
extern PFNGLPROGRAMBINARYPROC glProgramBinary;
|
||||||
|
extern PFNGLPROGRAMPARAMETERIPROC glProgramParameteri;
|
||||||
|
|
||||||
|
extern PFNGLTEXSTORAGE2DPROC glTexStorage2D;
|
||||||
|
|
||||||
|
void initGLFunctions();
|
||||||
|
|
||||||
|
#endif // GLFUNCTIONS_H
|
36
src/Graphics/OpenGLContext/OpenGLContextImpl.cpp
Normal file
36
src/Graphics/OpenGLContext/OpenGLContextImpl.cpp
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
#include "OpenGLContextImpl.h"
|
||||||
|
#include "GLFunctions.h"
|
||||||
|
|
||||||
|
using namespace opengl;
|
||||||
|
|
||||||
|
OpenGLContextImpl::OpenGLContextImpl()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
OpenGLContextImpl::~OpenGLContextImpl()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void OpenGLContextImpl::init()
|
||||||
|
{
|
||||||
|
initGLFunctions();
|
||||||
|
}
|
||||||
|
|
||||||
|
void OpenGLContextImpl::destroy()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
graphics::ObjectName OpenGLContextImpl::createTexture() const
|
||||||
|
{
|
||||||
|
GLuint glName;
|
||||||
|
glGenTextures(1, &glName);
|
||||||
|
return graphics::ObjectName(static_cast<u32>(glName));
|
||||||
|
}
|
||||||
|
|
||||||
|
void OpenGLContextImpl::deleteTexture(graphics::ObjectName _name) const
|
||||||
|
{
|
||||||
|
u32 glName(_name);
|
||||||
|
glDeleteTextures(1, &glName);
|
||||||
|
}
|
17
src/Graphics/OpenGLContext/OpenGLContextImpl.h
Normal file
17
src/Graphics/OpenGLContext/OpenGLContextImpl.h
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
#pragma once
|
||||||
|
#include <Graphics/ContextImpl.h>
|
||||||
|
|
||||||
|
namespace opengl {
|
||||||
|
|
||||||
|
class OpenGLContextImpl : public graphics::ContextImpl
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
OpenGLContextImpl();
|
||||||
|
virtual ~OpenGLContextImpl();
|
||||||
|
void init() override;
|
||||||
|
void destroy() override;
|
||||||
|
graphics::ObjectName createTexture() const override;
|
||||||
|
void deleteTexture(graphics::ObjectName _name) const override;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
|
@ -27,6 +27,7 @@
|
||||||
#include "SoftwareRender.h"
|
#include "SoftwareRender.h"
|
||||||
#include "FBOTextureFormats.h"
|
#include "FBOTextureFormats.h"
|
||||||
#include "TextureFilterHandler.h"
|
#include "TextureFilterHandler.h"
|
||||||
|
#include "Graphics/Context.h"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
|
@ -157,6 +158,7 @@ void OGLVideo::start()
|
||||||
{
|
{
|
||||||
_start(); // TODO: process initialization error
|
_start(); // TODO: process initialization error
|
||||||
initGLFunctions();
|
initGLFunctions();
|
||||||
|
gfxContext.init();
|
||||||
m_render._initData();
|
m_render._initData();
|
||||||
m_buffersSwapCount = 0;
|
m_buffersSwapCount = 0;
|
||||||
}
|
}
|
||||||
|
@ -164,6 +166,7 @@ void OGLVideo::start()
|
||||||
void OGLVideo::stop()
|
void OGLVideo::stop()
|
||||||
{
|
{
|
||||||
m_render._destroyData();
|
m_render._destroyData();
|
||||||
|
gfxContext.destroy();
|
||||||
_stop();
|
_stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
#include "Keys.h"
|
#include "Keys.h"
|
||||||
#include "GLideNHQ/Ext_TxFilter.h"
|
#include "GLideNHQ/Ext_TxFilter.h"
|
||||||
#include "TextureFilterHandler.h"
|
#include "TextureFilterHandler.h"
|
||||||
|
#include "Graphics/Context.h"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
|
@ -555,9 +556,7 @@ CachedTexture * TextureCache::_addTexture(u32 _crc32)
|
||||||
if (m_curUnpackAlignment == 0)
|
if (m_curUnpackAlignment == 0)
|
||||||
glGetIntegerv(GL_UNPACK_ALIGNMENT, &m_curUnpackAlignment);
|
glGetIntegerv(GL_UNPACK_ALIGNMENT, &m_curUnpackAlignment);
|
||||||
_checkCacheSize();
|
_checkCacheSize();
|
||||||
GLuint glName;
|
m_textures.emplace_front(gfxContext.createTexture());
|
||||||
glGenTextures(1, &glName);
|
|
||||||
m_textures.emplace_front(glName);
|
|
||||||
Textures::iterator new_iter = m_textures.begin();
|
Textures::iterator new_iter = m_textures.begin();
|
||||||
new_iter->crc = _crc32;
|
new_iter->crc = _crc32;
|
||||||
m_lruTextureLocations.insert(std::pair<u32, Textures::iterator>(_crc32, new_iter));
|
m_lruTextureLocations.insert(std::pair<u32, Textures::iterator>(_crc32, new_iter));
|
||||||
|
@ -569,17 +568,16 @@ void TextureCache::removeFrameBufferTexture(CachedTexture * _pTexture)
|
||||||
FBTextures::const_iterator iter = m_fbTextures.find(_pTexture->glName);
|
FBTextures::const_iterator iter = m_fbTextures.find(_pTexture->glName);
|
||||||
assert(iter != m_fbTextures.cend());
|
assert(iter != m_fbTextures.cend());
|
||||||
m_cachedBytes -= iter->second.textureBytes;
|
m_cachedBytes -= iter->second.textureBytes;
|
||||||
glDeleteTextures( 1, &iter->second.glName );
|
gfxContext.deleteTexture(graphics::ObjectName(iter->second.glName));
|
||||||
m_fbTextures.erase(iter);
|
m_fbTextures.erase(iter);
|
||||||
}
|
}
|
||||||
|
|
||||||
CachedTexture * TextureCache::addFrameBufferTexture()
|
CachedTexture * TextureCache::addFrameBufferTexture()
|
||||||
{
|
{
|
||||||
_checkCacheSize();
|
_checkCacheSize();
|
||||||
GLuint glName;
|
u32 texName(gfxContext.createTexture());
|
||||||
glGenTextures(1, &glName);
|
m_fbTextures.emplace(texName, texName);
|
||||||
m_fbTextures.emplace(glName, glName);
|
return &m_fbTextures.at(texName);
|
||||||
return &m_fbTextures.at(glName);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct TileSizes
|
struct TileSizes
|
||||||
|
|
|
@ -15,9 +15,9 @@ typedef u32 (*GetTexelFunc)( u64 *src, u16 x, u16 i, u8 palette );
|
||||||
|
|
||||||
struct CachedTexture
|
struct CachedTexture
|
||||||
{
|
{
|
||||||
CachedTexture(GLuint _glName) : glName(_glName), max_level(0), frameBufferTexture(fbNone), bHDTexture(false) {}
|
CachedTexture(u32 _glName) : glName(_glName), max_level(0), frameBufferTexture(fbNone), bHDTexture(false) {}
|
||||||
|
|
||||||
GLuint glName;
|
u32 glName;
|
||||||
u32 crc;
|
u32 crc;
|
||||||
// float fulS, fulT;
|
// float fulS, fulT;
|
||||||
// WORD ulS, ulT, lrS, lrT;
|
// WORD ulS, ulT, lrS, lrT;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user