mirror of
https://github.com/blawar/GLideN64.git
synced 2024-07-04 10:03:36 +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)'=='Debug_mupenplus|Win32'">true</ExcludedFromBuild>
|
||||
</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\Keys.cpp" />
|
||||
<ClCompile Include="..\..\src\Log.cpp" />
|
||||
|
@ -421,6 +424,11 @@
|
|||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_mupenplus|Win32'">true</ExcludedFromBuild>
|
||||
</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\inc\glext.h" />
|
||||
<ClInclude Include="..\..\src\Keys.h" />
|
||||
|
|
|
@ -57,6 +57,18 @@
|
|||
<Filter Include="Header Files\common">
|
||||
<UniqueIdentifier>{699714e2-bd52-4b7d-a5d5-4e514651293f}</UniqueIdentifier>
|
||||
</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>
|
||||
<ClCompile Include="..\..\src\Combiner.cpp">
|
||||
|
@ -266,6 +278,15 @@
|
|||
<ClCompile Include="..\..\src\F3DBETA.cpp">
|
||||
<Filter>Source Files\uCodes</Filter>
|
||||
</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>
|
||||
<ClInclude Include="..\..\src\3DMath.h">
|
||||
|
@ -475,5 +496,20 @@
|
|||
<ClInclude Include="..\..\src\F3DBETA.h">
|
||||
<Filter>Header Files\uCodes</Filter>
|
||||
</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>
|
||||
</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 "FBOTextureFormats.h"
|
||||
#include "TextureFilterHandler.h"
|
||||
#include "Graphics/Context.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
|
@ -157,6 +158,7 @@ void OGLVideo::start()
|
|||
{
|
||||
_start(); // TODO: process initialization error
|
||||
initGLFunctions();
|
||||
gfxContext.init();
|
||||
m_render._initData();
|
||||
m_buffersSwapCount = 0;
|
||||
}
|
||||
|
@ -164,6 +166,7 @@ void OGLVideo::start()
|
|||
void OGLVideo::stop()
|
||||
{
|
||||
m_render._destroyData();
|
||||
gfxContext.destroy();
|
||||
_stop();
|
||||
}
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
#include "Keys.h"
|
||||
#include "GLideNHQ/Ext_TxFilter.h"
|
||||
#include "TextureFilterHandler.h"
|
||||
#include "Graphics/Context.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
|
@ -555,9 +556,7 @@ CachedTexture * TextureCache::_addTexture(u32 _crc32)
|
|||
if (m_curUnpackAlignment == 0)
|
||||
glGetIntegerv(GL_UNPACK_ALIGNMENT, &m_curUnpackAlignment);
|
||||
_checkCacheSize();
|
||||
GLuint glName;
|
||||
glGenTextures(1, &glName);
|
||||
m_textures.emplace_front(glName);
|
||||
m_textures.emplace_front(gfxContext.createTexture());
|
||||
Textures::iterator new_iter = m_textures.begin();
|
||||
new_iter->crc = _crc32;
|
||||
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);
|
||||
assert(iter != m_fbTextures.cend());
|
||||
m_cachedBytes -= iter->second.textureBytes;
|
||||
glDeleteTextures( 1, &iter->second.glName );
|
||||
gfxContext.deleteTexture(graphics::ObjectName(iter->second.glName));
|
||||
m_fbTextures.erase(iter);
|
||||
}
|
||||
|
||||
CachedTexture * TextureCache::addFrameBufferTexture()
|
||||
{
|
||||
_checkCacheSize();
|
||||
GLuint glName;
|
||||
glGenTextures(1, &glName);
|
||||
m_fbTextures.emplace(glName, glName);
|
||||
return &m_fbTextures.at(glName);
|
||||
u32 texName(gfxContext.createTexture());
|
||||
m_fbTextures.emplace(texName, texName);
|
||||
return &m_fbTextures.at(texName);
|
||||
}
|
||||
|
||||
struct TileSizes
|
||||
|
|
|
@ -15,9 +15,9 @@ typedef u32 (*GetTexelFunc)( u64 *src, u16 x, u16 i, u8 palette );
|
|||
|
||||
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;
|
||||
// float fulS, fulT;
|
||||
// WORD ulS, ulT, lrS, lrT;
|
||||
|
|
Loading…
Reference in New Issue
Block a user