1
0
mirror of https://github.com/blawar/GLideN64.git synced 2024-07-04 10:03:36 +00:00

Added more GL functions to threaded GL implementation

This commit is contained in:
fzurita 2019-11-03 12:04:49 -05:00 committed by Sergey Lipskiy
parent e333dea890
commit d7996329c1
6 changed files with 128 additions and 19 deletions

View File

@ -196,7 +196,9 @@ PFNGLENABLEIPROC ptrEnablei;
PFNGLDISABLEIPROC ptrDisablei;
PFNGLDEBUGMESSAGECALLBACKPROC ptrDebugMessageCallback;
PFNGLDEBUGMESSAGECONTROLPROC ptrDebugMessageControl;
PFNGLCOPYTEXIMAGE2DPROC ptrCopyTexImage2D;
PFNGLEGLIMAGETARGETTEXTURE2DOESPROC ptrEGLImageTargetTexture2DOES;
PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC ptrEGLImageTargetRenderbufferStorageOES;
void initGLFunctions()
{
@ -382,5 +384,8 @@ void initGLFunctions()
GL_GET_PROC_ADR(PFNGLDISABLEIPROC, Disablei);
GL_GET_PROC_ADR(PFNGLDEBUGMESSAGECALLBACKPROC, DebugMessageCallback);
GL_GET_PROC_ADR(PFNGLDEBUGMESSAGECONTROLPROC, DebugMessageControl);
GL_GET_PROC_ADR(PFNGLCOPYTEXIMAGE2DPROC, CopyTexImage2D);
GL_GET_PROC_ADR(PFNGLEGLIMAGETARGETTEXTURE2DOESPROC, EGLImageTargetTexture2DOES);
GL_GET_PROC_ADR(PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC, EGLImageTargetRenderbufferStorageOES);
}

View File

@ -48,6 +48,7 @@ typedef void (APIENTRYP PFNGLDRAWARRAYSPROC) (GLenum mode, GLint first, GLsizei
typedef void (APIENTRYP PFNGLDRAWELEMENTSPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices);
typedef void (APIENTRYP PFNGLDELETETEXTURESPROC) (GLsizei n, const GLuint *textures);
typedef void (APIENTRYP PFNGLGENTEXTURESPROC) (GLsizei n, GLuint *textures);
typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
#endif
extern PFNGLBLENDFUNCPROC ptrBlendFunc;
@ -190,11 +191,14 @@ extern PFNGLENABLEIPROC ptrEnablei;
extern PFNGLDISABLEIPROC ptrDisablei;
extern PFNGLDEBUGMESSAGECALLBACKPROC ptrDebugMessageCallback;
extern PFNGLDEBUGMESSAGECONTROLPROC ptrDebugMessageControl;
extern PFNGLCOPYTEXIMAGE2DPROC ptrCopyTexImage2D;
typedef void (APIENTRYP PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) (GLenum target, void* image);
extern PFNGLEGLIMAGETARGETTEXTURE2DOESPROC ptrEGLImageTargetTexture2DOES;
typedef void (APIENTRYP PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC) (GLenum target, void* image);
extern PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC ptrEGLImageTargetRenderbufferStorageOES;
void initGLFunctions();
#define glGetError(...) opengl::FunctionWrapper::wrGetError(__VA_ARGS__)
@ -329,9 +333,11 @@ void initGLFunctions();
#define glClearBufferfv(...) opengl::FunctionWrapper::wrClearBufferfv(__VA_ARGS__)
#define glEnablei(...) opengl::FunctionWrapper::wrEnablei(__VA_ARGS__)
#define glDisablei(...) opengl::FunctionWrapper::wrDisablei(__VA_ARGS__)
#define glEGLImageTargetTexture2DOES(...) opengl::FunctionWrapper::wrEGLImageTargetTexture2DOES(__VA_ARGS__)
#define glCopyTexImage2D(...) opengl::FunctionWrapper::wrCopyTexImage2D(__VA_ARGS__)
#define glDebugMessageCallback(...) opengl::FunctionWrapper::wrDebugMessageCallback(__VA_ARGS__)
#define glDebugMessageControl(...) opengl::FunctionWrapper::wrDebugMessageControl(__VA_ARGS__)
#define glEGLImageTargetTexture2DOES(...) opengl::FunctionWrapper::wrEGLImageTargetTexture2DOES(__VA_ARGS__)
#define glEGLImageTargetRenderbufferStorageOES(...) opengl::FunctionWrapper::wrEGLImageTargetRenderbufferStorageOES(__VA_ARGS__)
#define GL_TEXTURE_EXTERNAL_OES 0x8D65

View File

@ -4714,36 +4714,48 @@ private:
}
};
class GlEGLImageTargetTexture2DOESCommand : public OpenGlCommand
class GlCopyTexImage2DCommand : public OpenGlCommand
{
public:
GlEGLImageTargetTexture2DOESCommand() :
OpenGlCommand(false, false, "glEGLImageTargetTexture2DOES")
GlCopyTexImage2DCommand() :
OpenGlCommand(false, false, "glCopyTexImage2D")
{
}
static std::shared_ptr<OpenGlCommand> get(GLenum target, void* image)
static std::shared_ptr<OpenGlCommand> get(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
{
static int poolId = OpenGlCommandPool::get().getNextAvailablePool();
auto ptr = getFromPool<GlEGLImageTargetTexture2DOESCommand>(poolId);
ptr->set(target, image);
auto ptr = getFromPool<GlCopyTexImage2DCommand>(poolId);
ptr->set(target, level, internalformat, x, y, width, height, border);
return ptr;
}
void commandToExecute() override
{
ptrEGLImageTargetTexture2DOES(m_target, m_image);
ptrCopyTexImage2D(m_target, m_level, m_internalformat, m_x, m_y, m_width, m_height, m_border);
}
private:
void set(GLenum target, void* image)
void set(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
{
m_target = target;
m_image = image;
m_level = level;
m_internalformat = internalformat;
m_x = x;
m_y = y;
m_width = width;
m_height = height;
m_border = border;
}
GLenum m_target;
void* m_image;
GLint m_level;
GLenum m_internalformat;
GLint m_x;
GLint m_y;
GLsizei m_width;
GLsizei m_height;
GLint m_border;
};
class GlDebugMessageCallbackCommand : public OpenGlCommand
@ -4818,6 +4830,70 @@ private:
GLboolean m_enabled;
};
class GlEGLImageTargetTexture2DOESCommand : public OpenGlCommand
{
public:
GlEGLImageTargetTexture2DOESCommand() :
OpenGlCommand(false, false, "glEGLImageTargetTexture2DOES")
{
}
static std::shared_ptr<OpenGlCommand> get(GLenum target, void* image)
{
static int poolId = OpenGlCommandPool::get().getNextAvailablePool();
auto ptr = getFromPool<GlEGLImageTargetTexture2DOESCommand>(poolId);
ptr->set(target, image);
return ptr;
}
void commandToExecute() override
{
ptrEGLImageTargetTexture2DOES(m_target, m_image);
}
private:
void set(GLenum target, void* image)
{
m_target = target;
m_image = image;
}
GLenum m_target;
void* m_image;
};
class GlEGLImageTargetRenderbufferStorageOESCommand : public OpenGlCommand
{
public:
GlEGLImageTargetRenderbufferStorageOESCommand() :
OpenGlCommand(false, false, "glEGLImageTargetRenderbufferStorageOES")
{
}
static std::shared_ptr<OpenGlCommand> get(GLenum target, void* image)
{
static int poolId = OpenGlCommandPool::get().getNextAvailablePool();
auto ptr = getFromPool<GlEGLImageTargetRenderbufferStorageOESCommand>(poolId);
ptr->set(target, image);
return ptr;
}
void commandToExecute() override
{
ptrEGLImageTargetRenderbufferStorageOES(m_target, m_image);
}
private:
void set(GLenum target, void* image)
{
m_target = target;
m_image = image;
}
GLenum m_target;
void* m_image;
};
class ShutdownCommand : public OpenGlCommand
{
public:

View File

@ -1302,12 +1302,12 @@ namespace opengl {
ptrFinish();
}
void FunctionWrapper::wrEGLImageTargetTexture2DOES(GLenum target, void* image)
void FunctionWrapper::wrCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
{
if (m_threaded_wrapper)
executeCommand(GlEGLImageTargetTexture2DOESCommand::get(target, image));
executeCommand(GlCopyTexImage2DCommand::get(target, level, internalformat, x, y, width, height, border));
else
ptrEGLImageTargetTexture2DOES(target, image);
ptrCopyTexImage2D(target, level, internalformat, x, y, width, height, border);
}
void FunctionWrapper::wrDebugMessageCallback(GLDEBUGPROC callback, const void *userParam)
@ -1318,7 +1318,6 @@ namespace opengl {
ptrDebugMessageCallback(callback, userParam);
}
void FunctionWrapper::wrDebugMessageControl(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled)
{
if (m_threaded_wrapper)
@ -1327,6 +1326,21 @@ namespace opengl {
ptrDebugMessageControl(source, type, severity, count, ids, enabled);
}
void FunctionWrapper::wrEGLImageTargetTexture2DOES(GLenum target, void* image)
{
if (m_threaded_wrapper)
executeCommand(GlEGLImageTargetTexture2DOESCommand::get(target, image));
else
ptrEGLImageTargetTexture2DOES(target, image);
}
void FunctionWrapper::wrEGLImageTargetRenderbufferStorageOES(GLenum target, void* image)
{
if (m_threaded_wrapper)
executeCommand(GlEGLImageTargetRenderbufferStorageOESCommand::get(target, image));
else
ptrEGLImageTargetRenderbufferStorageOES(target, image);
}
#if defined(OS_ANDROID)
EGLClientBuffer FunctionWrapper::ewrGetNativeClientBufferANDROID(const AHardwareBuffer *buffer)

View File

@ -171,10 +171,11 @@ namespace opengl {
static void wrDrawRangeElementsBaseVertex(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const u16* indices, GLint basevertex);
static void wrFlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length);
static void wrFinish();
static void wrEGLImageTargetTexture2DOES(GLenum target, void* image);
static void wrCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
static void wrDebugMessageCallback(GLDEBUGPROC callback, const void *userParam);
static void wrDebugMessageControl(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
static void wrEGLImageTargetTexture2DOES(GLenum target, void* image);
static void wrEGLImageTargetRenderbufferStorageOES(GLenum target, void* image);
#if defined(OS_ANDROID)
static EGLClientBuffer ewrGetNativeClientBufferANDROID(const AHardwareBuffer *buffer);

View File

@ -13,7 +13,14 @@
using namespace opengl;
static void on_gl_error(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const char* message, const void *userParam)
static
void APIENTRY on_gl_error(GLenum source,
GLenum type,
GLuint id,
GLenum severity,
GLsizei length,
const char* message,
const void *userParam)
{
LOG(LOG_ERROR, "%s", message);
}