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:
parent
e333dea890
commit
d7996329c1
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user