mirror of
https://github.com/libretro/boxes.git
synced 2026-11-07 10:15:59 -10:00
Add GLES3 support.
This commit is contained in:
1 parent
38c590b9b4
commit
aaca455995
6 files changed
+209
-3
No files matched your search
@@ -47,9 +47,20 @@ CXXFLAGS += -std=gnu++11 -Wall -pedantic $(fpic) -DHAVE_ZIP_DEFLATE $(shell pkg-
|
||||
CFLAGS += -std=gnu99 -Wall -pedantic $(fpic) -DHAVE_ZIP_DEFLATE
|
||||
|
||||
SOURCES := $(wildcard *.cpp) $(wildcard */*.cpp)
|
||||
CSOURCES := $(wildcard *.c) $(wildcard */*.c)
|
||||
CSOURCES = $(wildcard rpng/*.c) glsym/rglgen.c
|
||||
LIBS += $(shell pkg-config assimp --libs)
|
||||
|
||||
ifeq ($(GLES), 1)
|
||||
LIBS += -lGLESv2
|
||||
CXXFLAGS += -DHAVE_OPENGLES2 -DHAVE_OPENGLES3
|
||||
CFLAGS += -DHAVE_OPENGLES2 -DHAVE_OPENGLES3
|
||||
CSOURCES += glsym/glsym_es2.c
|
||||
else
|
||||
LIBS += $(GL_LIB)
|
||||
CSOURCES += glsym/glsym_gl.c
|
||||
endif
|
||||
|
||||
OBJECTS := $(SOURCES:.cpp=.o) $(CSOURCES:.c=.o)
|
||||
LIBS += $(GL_LIB) $(shell pkg-config assimp --libs)
|
||||
|
||||
all: $(TARGET)
|
||||
|
||||
|
||||
@@ -53,7 +53,11 @@ namespace GL
|
||||
const vector<string>& defines)
|
||||
{
|
||||
vector<const GLchar*> gl_source = {
|
||||
#ifdef HAVE_OPENGLES3
|
||||
"#version 300 es\nlayout(std140) uniform;\n",
|
||||
#else
|
||||
"#version 140\nlayout(std140) uniform;\n",
|
||||
#endif
|
||||
};
|
||||
for (auto& define : defines)
|
||||
gl_source.push_back(define.c_str());
|
||||
@@ -89,6 +93,9 @@ namespace GL
|
||||
auto defines = current_defines();
|
||||
|
||||
compile_shader(vert, source_vs, defines);
|
||||
#ifdef HAVE_OPENGLES3
|
||||
defines.insert(begin(defines), "precision highp float;\n");
|
||||
#endif
|
||||
compile_shader(frag, source_fs, defines);
|
||||
|
||||
glAttachShader(prog, vert);
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
#include "glsym.h"
|
||||
#include <stddef.h>
|
||||
#define SYM(x) { "gl" #x, &(gl##x) }
|
||||
const struct rglgen_sym_map rglgen_symbol_map[] = {
|
||||
SYM(EGLImageTargetTexture2DOES),
|
||||
SYM(EGLImageTargetRenderbufferStorageOES),
|
||||
SYM(GetProgramBinaryOES),
|
||||
SYM(ProgramBinaryOES),
|
||||
SYM(MapBufferOES),
|
||||
SYM(UnmapBufferOES),
|
||||
SYM(GetBufferPointervOES),
|
||||
SYM(TexImage3DOES),
|
||||
SYM(TexSubImage3DOES),
|
||||
SYM(CopyTexSubImage3DOES),
|
||||
SYM(CompressedTexImage3DOES),
|
||||
SYM(CompressedTexSubImage3DOES),
|
||||
SYM(FramebufferTexture3DOES),
|
||||
SYM(BindVertexArrayOES),
|
||||
SYM(DeleteVertexArraysOES),
|
||||
SYM(GenVertexArraysOES),
|
||||
SYM(IsVertexArrayOES),
|
||||
SYM(DebugMessageControl),
|
||||
SYM(DebugMessageInsert),
|
||||
SYM(DebugMessageCallback),
|
||||
SYM(GetDebugMessageLog),
|
||||
SYM(PushDebugGroup),
|
||||
SYM(PopDebugGroup),
|
||||
SYM(ObjectLabel),
|
||||
SYM(GetObjectLabel),
|
||||
SYM(ObjectPtrLabel),
|
||||
SYM(GetObjectPtrLabel),
|
||||
SYM(GetPointerv),
|
||||
|
||||
{ NULL, NULL },
|
||||
};
|
||||
RGLSYMGLEGLIMAGETARGETTEXTURE2DOESPROC __rglgen_glEGLImageTargetTexture2DOES;
|
||||
RGLSYMGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC __rglgen_glEGLImageTargetRenderbufferStorageOES;
|
||||
RGLSYMGLGETPROGRAMBINARYOESPROC __rglgen_glGetProgramBinaryOES;
|
||||
RGLSYMGLPROGRAMBINARYOESPROC __rglgen_glProgramBinaryOES;
|
||||
RGLSYMGLMAPBUFFEROESPROC __rglgen_glMapBufferOES;
|
||||
RGLSYMGLUNMAPBUFFEROESPROC __rglgen_glUnmapBufferOES;
|
||||
RGLSYMGLGETBUFFERPOINTERVOESPROC __rglgen_glGetBufferPointervOES;
|
||||
RGLSYMGLTEXIMAGE3DOESPROC __rglgen_glTexImage3DOES;
|
||||
RGLSYMGLTEXSUBIMAGE3DOESPROC __rglgen_glTexSubImage3DOES;
|
||||
RGLSYMGLCOPYTEXSUBIMAGE3DOESPROC __rglgen_glCopyTexSubImage3DOES;
|
||||
RGLSYMGLCOMPRESSEDTEXIMAGE3DOESPROC __rglgen_glCompressedTexImage3DOES;
|
||||
RGLSYMGLCOMPRESSEDTEXSUBIMAGE3DOESPROC __rglgen_glCompressedTexSubImage3DOES;
|
||||
RGLSYMGLFRAMEBUFFERTEXTURE3DOESPROC __rglgen_glFramebufferTexture3DOES;
|
||||
RGLSYMGLBINDVERTEXARRAYOESPROC __rglgen_glBindVertexArrayOES;
|
||||
RGLSYMGLDELETEVERTEXARRAYSOESPROC __rglgen_glDeleteVertexArraysOES;
|
||||
RGLSYMGLGENVERTEXARRAYSOESPROC __rglgen_glGenVertexArraysOES;
|
||||
RGLSYMGLISVERTEXARRAYOESPROC __rglgen_glIsVertexArrayOES;
|
||||
RGLSYMGLDEBUGMESSAGECONTROLPROC __rglgen_glDebugMessageControl;
|
||||
RGLSYMGLDEBUGMESSAGEINSERTPROC __rglgen_glDebugMessageInsert;
|
||||
RGLSYMGLDEBUGMESSAGECALLBACKPROC __rglgen_glDebugMessageCallback;
|
||||
RGLSYMGLGETDEBUGMESSAGELOGPROC __rglgen_glGetDebugMessageLog;
|
||||
RGLSYMGLPUSHDEBUGGROUPPROC __rglgen_glPushDebugGroup;
|
||||
RGLSYMGLPOPDEBUGGROUPPROC __rglgen_glPopDebugGroup;
|
||||
RGLSYMGLOBJECTLABELPROC __rglgen_glObjectLabel;
|
||||
RGLSYMGLGETOBJECTLABELPROC __rglgen_glGetObjectLabel;
|
||||
RGLSYMGLOBJECTPTRLABELPROC __rglgen_glObjectPtrLabel;
|
||||
RGLSYMGLGETOBJECTPTRLABELPROC __rglgen_glGetObjectPtrLabel;
|
||||
RGLSYMGLGETPOINTERVPROC __rglgen_glGetPointerv;
|
||||
|
||||
@@ -0,0 +1,116 @@
|
||||
#ifndef RGLGEN_DECL_H__
|
||||
#define RGLGEN_DECL_H__
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#ifdef GL_APIENTRY
|
||||
typedef void (GL_APIENTRY *RGLGENGLDEBUGPROC)(GLenum, GLenum, GLuint, GLenum, GLsizei, const GLchar*, GLvoid*);
|
||||
#else
|
||||
#ifndef APIENTRY
|
||||
#define APIENTRY
|
||||
#endif
|
||||
#ifndef APIENTRYP
|
||||
#define APIENTRYP APIENTRY *
|
||||
#endif
|
||||
typedef void (APIENTRY *RGLGENGLDEBUGPROCARB)(GLenum, GLenum, GLuint, GLenum, GLsizei, const GLchar*, GLvoid*);
|
||||
typedef void (APIENTRY *RGLGENGLDEBUGPROC)(GLenum, GLenum, GLuint, GLenum, GLsizei, const GLchar*, GLvoid*);
|
||||
#endif
|
||||
#ifndef GL_OES_EGL_image
|
||||
typedef void *GLeglImageOES;
|
||||
#endif
|
||||
#if !defined(GL_OES_fixed_point) && !defined(HAVE_OPENGLES2)
|
||||
typedef GLint GLfixed;
|
||||
#endif
|
||||
typedef void (GL_APIENTRYP RGLSYMGLEGLIMAGETARGETTEXTURE2DOESPROC) (GLenum target, GLeglImageOES image);
|
||||
typedef void (GL_APIENTRYP RGLSYMGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC) (GLenum target, GLeglImageOES image);
|
||||
typedef void (GL_APIENTRYP RGLSYMGLGETPROGRAMBINARYOESPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary);
|
||||
typedef void (GL_APIENTRYP RGLSYMGLPROGRAMBINARYOESPROC) (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLint length);
|
||||
typedef void* (GL_APIENTRYP RGLSYMGLMAPBUFFEROESPROC) (GLenum target, GLenum access);
|
||||
typedef GLboolean (GL_APIENTRYP RGLSYMGLUNMAPBUFFEROESPROC) (GLenum target);
|
||||
typedef void (GL_APIENTRYP RGLSYMGLGETBUFFERPOINTERVOESPROC) (GLenum target, GLenum pname, GLvoid** params);
|
||||
typedef void (GL_APIENTRYP RGLSYMGLTEXIMAGE3DOESPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels);
|
||||
typedef void (GL_APIENTRYP RGLSYMGLTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* pixels);
|
||||
typedef void (GL_APIENTRYP RGLSYMGLCOPYTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
|
||||
typedef void (GL_APIENTRYP RGLSYMGLCOMPRESSEDTEXIMAGE3DOESPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data);
|
||||
typedef void (GL_APIENTRYP RGLSYMGLCOMPRESSEDTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data);
|
||||
typedef void (GL_APIENTRYP RGLSYMGLFRAMEBUFFERTEXTURE3DOESPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
|
||||
typedef void (GL_APIENTRYP RGLSYMGLBINDVERTEXARRAYOESPROC) (GLuint array);
|
||||
typedef void (GL_APIENTRYP RGLSYMGLDELETEVERTEXARRAYSOESPROC) (GLsizei n, const GLuint *arrays);
|
||||
typedef void (GL_APIENTRYP RGLSYMGLGENVERTEXARRAYSOESPROC) (GLsizei n, GLuint *arrays);
|
||||
typedef GLboolean (GL_APIENTRYP RGLSYMGLISVERTEXARRAYOESPROC) (GLuint array);
|
||||
typedef void (GL_APIENTRYP RGLSYMGLDEBUGMESSAGECONTROLPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
|
||||
typedef void (GL_APIENTRYP RGLSYMGLDEBUGMESSAGEINSERTPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);
|
||||
typedef void (GL_APIENTRYP RGLSYMGLDEBUGMESSAGECALLBACKPROC) (RGLGENGLDEBUGPROC callback, const void *userParam);
|
||||
typedef GLuint (GL_APIENTRYP RGLSYMGLGETDEBUGMESSAGELOGPROC) (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);
|
||||
typedef void (GL_APIENTRYP RGLSYMGLPUSHDEBUGGROUPPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message);
|
||||
typedef void (GL_APIENTRYP RGLSYMGLPOPDEBUGGROUPPROC) (void);
|
||||
typedef void (GL_APIENTRYP RGLSYMGLOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label);
|
||||
typedef void (GL_APIENTRYP RGLSYMGLGETOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label);
|
||||
typedef void (GL_APIENTRYP RGLSYMGLOBJECTPTRLABELPROC) (const void *ptr, GLsizei length, const GLchar *label);
|
||||
typedef void (GL_APIENTRYP RGLSYMGLGETOBJECTPTRLABELPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label);
|
||||
typedef void (GL_APIENTRYP RGLSYMGLGETPOINTERVPROC) (GLenum pname, void **params);
|
||||
|
||||
#define glEGLImageTargetTexture2DOES __rglgen_glEGLImageTargetTexture2DOES
|
||||
#define glEGLImageTargetRenderbufferStorageOES __rglgen_glEGLImageTargetRenderbufferStorageOES
|
||||
#define glGetProgramBinaryOES __rglgen_glGetProgramBinaryOES
|
||||
#define glProgramBinaryOES __rglgen_glProgramBinaryOES
|
||||
#define glMapBufferOES __rglgen_glMapBufferOES
|
||||
#define glUnmapBufferOES __rglgen_glUnmapBufferOES
|
||||
#define glGetBufferPointervOES __rglgen_glGetBufferPointervOES
|
||||
#define glTexImage3DOES __rglgen_glTexImage3DOES
|
||||
#define glTexSubImage3DOES __rglgen_glTexSubImage3DOES
|
||||
#define glCopyTexSubImage3DOES __rglgen_glCopyTexSubImage3DOES
|
||||
#define glCompressedTexImage3DOES __rglgen_glCompressedTexImage3DOES
|
||||
#define glCompressedTexSubImage3DOES __rglgen_glCompressedTexSubImage3DOES
|
||||
#define glFramebufferTexture3DOES __rglgen_glFramebufferTexture3DOES
|
||||
#define glBindVertexArrayOES __rglgen_glBindVertexArrayOES
|
||||
#define glDeleteVertexArraysOES __rglgen_glDeleteVertexArraysOES
|
||||
#define glGenVertexArraysOES __rglgen_glGenVertexArraysOES
|
||||
#define glIsVertexArrayOES __rglgen_glIsVertexArrayOES
|
||||
#define glDebugMessageControl __rglgen_glDebugMessageControl
|
||||
#define glDebugMessageInsert __rglgen_glDebugMessageInsert
|
||||
#define glDebugMessageCallback __rglgen_glDebugMessageCallback
|
||||
#define glGetDebugMessageLog __rglgen_glGetDebugMessageLog
|
||||
#define glPushDebugGroup __rglgen_glPushDebugGroup
|
||||
#define glPopDebugGroup __rglgen_glPopDebugGroup
|
||||
#define glObjectLabel __rglgen_glObjectLabel
|
||||
#define glGetObjectLabel __rglgen_glGetObjectLabel
|
||||
#define glObjectPtrLabel __rglgen_glObjectPtrLabel
|
||||
#define glGetObjectPtrLabel __rglgen_glGetObjectPtrLabel
|
||||
#define glGetPointerv __rglgen_glGetPointerv
|
||||
|
||||
extern RGLSYMGLEGLIMAGETARGETTEXTURE2DOESPROC __rglgen_glEGLImageTargetTexture2DOES;
|
||||
extern RGLSYMGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC __rglgen_glEGLImageTargetRenderbufferStorageOES;
|
||||
extern RGLSYMGLGETPROGRAMBINARYOESPROC __rglgen_glGetProgramBinaryOES;
|
||||
extern RGLSYMGLPROGRAMBINARYOESPROC __rglgen_glProgramBinaryOES;
|
||||
extern RGLSYMGLMAPBUFFEROESPROC __rglgen_glMapBufferOES;
|
||||
extern RGLSYMGLUNMAPBUFFEROESPROC __rglgen_glUnmapBufferOES;
|
||||
extern RGLSYMGLGETBUFFERPOINTERVOESPROC __rglgen_glGetBufferPointervOES;
|
||||
extern RGLSYMGLTEXIMAGE3DOESPROC __rglgen_glTexImage3DOES;
|
||||
extern RGLSYMGLTEXSUBIMAGE3DOESPROC __rglgen_glTexSubImage3DOES;
|
||||
extern RGLSYMGLCOPYTEXSUBIMAGE3DOESPROC __rglgen_glCopyTexSubImage3DOES;
|
||||
extern RGLSYMGLCOMPRESSEDTEXIMAGE3DOESPROC __rglgen_glCompressedTexImage3DOES;
|
||||
extern RGLSYMGLCOMPRESSEDTEXSUBIMAGE3DOESPROC __rglgen_glCompressedTexSubImage3DOES;
|
||||
extern RGLSYMGLFRAMEBUFFERTEXTURE3DOESPROC __rglgen_glFramebufferTexture3DOES;
|
||||
extern RGLSYMGLBINDVERTEXARRAYOESPROC __rglgen_glBindVertexArrayOES;
|
||||
extern RGLSYMGLDELETEVERTEXARRAYSOESPROC __rglgen_glDeleteVertexArraysOES;
|
||||
extern RGLSYMGLGENVERTEXARRAYSOESPROC __rglgen_glGenVertexArraysOES;
|
||||
extern RGLSYMGLISVERTEXARRAYOESPROC __rglgen_glIsVertexArrayOES;
|
||||
extern RGLSYMGLDEBUGMESSAGECONTROLPROC __rglgen_glDebugMessageControl;
|
||||
extern RGLSYMGLDEBUGMESSAGEINSERTPROC __rglgen_glDebugMessageInsert;
|
||||
extern RGLSYMGLDEBUGMESSAGECALLBACKPROC __rglgen_glDebugMessageCallback;
|
||||
extern RGLSYMGLGETDEBUGMESSAGELOGPROC __rglgen_glGetDebugMessageLog;
|
||||
extern RGLSYMGLPUSHDEBUGGROUPPROC __rglgen_glPushDebugGroup;
|
||||
extern RGLSYMGLPOPDEBUGGROUPPROC __rglgen_glPopDebugGroup;
|
||||
extern RGLSYMGLOBJECTLABELPROC __rglgen_glObjectLabel;
|
||||
extern RGLSYMGLGETOBJECTLABELPROC __rglgen_glGetObjectLabel;
|
||||
extern RGLSYMGLOBJECTPTRLABELPROC __rglgen_glObjectPtrLabel;
|
||||
extern RGLSYMGLGETOBJECTPTRLABELPROC __rglgen_glGetObjectPtrLabel;
|
||||
extern RGLSYMGLGETPOINTERVPROC __rglgen_glGetPointerv;
|
||||
|
||||
struct rglgen_sym_map { const char *sym; void *ptr; };
|
||||
extern const struct rglgen_sym_map rglgen_symbol_map[];
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
@@ -23,6 +23,9 @@
|
||||
#elif defined(HAVE_OPENGL_MODERN)
|
||||
#include <GL3/gl3.h>
|
||||
#include <GL3/gl3ext.h>
|
||||
#elif defined(HAVE_OPENGLES3)
|
||||
#include <GLES3/gl3.h>
|
||||
#include <GLES2/gl2ext.h>
|
||||
#elif defined(HAVE_OPENGLES2)
|
||||
#include <GLES2/gl2.h>
|
||||
#include <GLES2/gl2ext.h>
|
||||
|
||||
+6
-1
@@ -236,7 +236,6 @@ bool retro_load_game(const struct retro_game_info *info)
|
||||
return false;
|
||||
}
|
||||
|
||||
hw_render.context_type = RETRO_HW_CONTEXT_OPENGL_CORE;
|
||||
hw_render.context_reset = context_reset;
|
||||
hw_render.context_destroy = context_destroy;
|
||||
hw_render.bottom_left_origin = true;
|
||||
@@ -245,7 +244,13 @@ bool retro_load_game(const struct retro_game_info *info)
|
||||
#ifdef GL_DEBUG
|
||||
hw_render.debug_context = true;
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_OPENGLES2
|
||||
hw_render.context_type = RETRO_HW_CONTEXT_OPENGLES2;
|
||||
#else
|
||||
hw_render.context_type = RETRO_HW_CONTEXT_OPENGL_CORE;
|
||||
app->get_context_version(hw_render.version_major, hw_render.version_minor);
|
||||
#endif
|
||||
|
||||
if (!environ_cb(RETRO_ENVIRONMENT_SET_HW_RENDER, &hw_render))
|
||||
return false;
|
||||
|
||||
Reference in new issue
Block a user