1
0
mirror of https://github.com/blawar/GLideN64.git synced 2024-07-02 09:03:37 +00:00

Start Graphics content implementation. First step: init , destroy , createTexture, deleteTexture

This commit is contained in:
Sergey Lipskiy 2016-12-25 00:36:27 +07:00
parent 599f7b1e93
commit 365b116c57
13 changed files with 471 additions and 10 deletions

View File

@ -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" />

View File

@ -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
View 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
View 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;

View 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
View 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;
};
}

View 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);
}

View 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

View 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);
}

View 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;
};
}

View File

@ -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();
}

View File

@ -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

View File

@ -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;