diff options
-rw-r--r-- | src/CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/Makefile.am | 2 | ||||
-rw-r--r-- | src/graphicsmanager.cpp | 6 | ||||
-rw-r--r-- | src/render/mgl.hpp | 46 | ||||
-rw-r--r-- | src/render/mgltypes.h | 64 | ||||
-rw-r--r-- | src/render/mobileopengl2graphics.cpp | 3 | ||||
-rw-r--r-- | src/render/mobileopenglgraphics.cpp | 4 | ||||
-rw-r--r-- | src/render/mobileopenglgraphics.h | 4 | ||||
-rw-r--r-- | src/render/modernopenglgraphics.cpp | 3 | ||||
-rw-r--r-- | src/render/naclgles.cpp | 49 | ||||
-rw-r--r-- | src/render/naclgles.h | 34 | ||||
-rw-r--r-- | src/render/shaders/shaderprogram.cpp | 3 | ||||
-rw-r--r-- | src/render/shaders/shadersmanager.cpp | 3 |
13 files changed, 168 insertions, 55 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index bcaa63983..a1fb32532 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1013,6 +1013,8 @@ SET(SRCS render/mobileopenglgraphics.h render/modernopenglgraphics.cpp render/modernopenglgraphics.h + render/naclgles.cpp + render/naclgles.h input/mouseinput.h mumblemanager.cpp mumblemanager.h diff --git a/src/Makefile.am b/src/Makefile.am index 782775d9b..aeb73164b 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -520,6 +520,8 @@ SRC += events/actionevent.h \ render/mobileopenglgraphics.h \ render/modernopenglgraphics.cpp \ render/modernopenglgraphics.h \ + render/naclgles.cpp \ + render/naclgles.h \ render/naclglfunctions.h \ render/normalopenglgraphics.cpp \ render/normalopenglgraphics.h \ diff --git a/src/graphicsmanager.cpp b/src/graphicsmanager.cpp index 70c4346bf..83be30964 100644 --- a/src/graphicsmanager.cpp +++ b/src/graphicsmanager.cpp @@ -33,6 +33,7 @@ #endif // USE_SDL2 #elif defined(__native_client__) #include <GL/Regal.h> +#include "render/naclgles.h" #else // ANDROID #include <GL/glx.h> #endif // ANDROID @@ -893,6 +894,10 @@ void GraphicsManager::deleteFBO(FBOInfo *const fbo) void GraphicsManager::initOpenGLFunctions() { +#ifdef __native_client__ + NaclGles::initGles(); + emulateFunction(glTextureSubImage2D); +#else const bool is10 = checkGLVersion(1, 0); const bool is11 = checkGLVersion(1, 1); const bool is12 = checkGLVersion(1, 2); @@ -1263,6 +1268,7 @@ void GraphicsManager::initOpenGLFunctions() #ifdef WIN32 assignFunctionARB(wglGetExtensionsString); #endif +#endif } void GraphicsManager::updateLimits() diff --git a/src/render/mgl.hpp b/src/render/mgl.hpp index 118b9491c..0370cde74 100644 --- a/src/render/mgl.hpp +++ b/src/render/mgl.hpp @@ -43,39 +43,43 @@ defName(glPopGroupMarker); defName(glGenVertexArrays); defName(glBindVertexArray); defName(glDeleteVertexArrays); -defName(glVertexAttribPointer); -defName(glEnableVertexAttribArray); defName(glDisableVertexAttribArray); -defName(glGenBuffers); -defName(glDeleteBuffers); -defName(glBindBuffer); -defName(glBufferData); -defName(glCreateShader); defName(glDeleteShader); -defName(glGetShaderiv); defName(glGetShaderInfoLog); defName(glGetShaderSource); -defName(glShaderSource); -defName(glCompileShader); -defName(glLinkProgram); -defName(glDeleteProgram); -defName(glCreateProgram); -defName(glAttachShader); defName(glDetachShader); defName(glGetAttachedShaders); -defName(glGetUniformLocation); defName(glGetActiveUniform); -defName(glGetProgramiv); defName(glBindFragDataLocation); +#ifndef __native_client__ +defName(glDeleteProgram); +defName(glCreateProgram); +defName(glGetProgramiv); +defName(glLinkProgram); +defName(glAttachShader); +defName(glGetShaderiv); +defName(glCompileShader); +defName(glShaderSource); +defName(glCreateShader); +defName(glGetUniformLocation); +defName(glGenBuffers); +defName(glDeleteBuffers); +defName(glBindBuffer); +defName(glBufferData); +defName(glEnableVertexAttribArray); +defName(glVertexAttribPointer); defName(glUseProgram); -defName(glValidateProgram); -defName(glGetAttribLocation); defName(glUniform1f); defName(glUniform2f); -defName(glUniform3f); defName(glUniform4f); -defName(glCheckFramebufferStatus); +defName(glValidateProgram); defName(glGetProgramInfoLog); +defName(glBindAttribLocation); +defName(glActiveTexture); +#endif +defName(glGetAttribLocation); +defName(glUniform3f); +defName(glCheckFramebufferStatus); defName(glProgramUniform1f); defName(glProgramUniform2f); defName(glProgramUniform3f); @@ -102,8 +106,6 @@ defName(glGetQueryObjectui64v); defName(glTextureSubImage2D); defName(glClearTexImage); defName(glClearTexSubImage); -defName(glBindAttribLocation); -defName(glActiveTexture); #ifdef WIN32 defName(wglGetExtensionsString); #endif diff --git a/src/render/mgltypes.h b/src/render/mgltypes.h index 479f5e177..1937bb6a2 100644 --- a/src/render/mgltypes.h +++ b/src/render/mgltypes.h @@ -85,55 +85,60 @@ typedef void (APIENTRY *glPopGroupMarker_t) (void); typedef void (APIENTRY *glGenVertexArrays_t) (GLsizei n, GLuint *arrays); typedef void (APIENTRY *glBindVertexArray_t) (GLuint array); typedef void (APIENTRY *glDeleteVertexArrays_t) (GLsizei n, GLuint *arrays); -typedef void (APIENTRY *glVertexAttribPointer_t) (GLuint index, GLint size, - GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRY *glEnableVertexAttribArray_t) (GLuint index); typedef void (APIENTRY *glDisableVertexAttribArray_t) (GLuint index); -typedef void (APIENTRY *glGenBuffers_t) (GLsizei n, GLuint *buffers); -typedef void (APIENTRY *glDeleteBuffers_t) (GLsizei n, GLuint *buffers); -typedef void (APIENTRY *glBindBuffer_t) (GLenum target, GLuint buffer); -typedef void (APIENTRY *glBufferData_t) (GLenum target, GLsizeiptr size, - const GLvoid *data, GLenum usage); -typedef GLuint (APIENTRY *glCreateShader_t) (GLenum shaderType); typedef void (APIENTRY *glDeleteShader_t) (GLenum shader); -typedef void (APIENTRY *glGetShaderiv_t) (GLuint shader, - GLenum pname, GLint *params); typedef void (APIENTRY *glGetShaderInfoLog_t) (GLuint shader, GLsizei maxLength, GLsizei *length, GLchar *infoLog); typedef void (APIENTRY *glGetShaderSource_t) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); -typedef void (APIENTRY *glShaderSource_t) (GLuint shader, - GLsizei count, const GLchar **string, const GLint *length); -typedef void (APIENTRY *glCompileShader_t) (GLuint shader); -typedef void (APIENTRY *glLinkProgram_t) (GLuint program); -typedef void (APIENTRY *glDeleteProgram_t) (GLuint program); -typedef GLuint (APIENTRY *glCreateProgram_t) (void); -typedef void (APIENTRY *glAttachShader_t) (GLuint program, GLuint shader); typedef void (APIENTRY *glDetachShader_t) (GLuint program, GLuint shader); typedef void (APIENTRY *glGetAttachedShaders_t) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders); -typedef GLint (APIENTRY *glGetUniformLocation_t) (GLuint program, - const GLchar *name); typedef void (APIENTRY *glGetActiveUniform_t) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -typedef void (APIENTRY *glGetProgramiv_t) (GLuint program, - GLenum pname, GLint *params); typedef GLint (APIENTRY *glBindFragDataLocation_t) (GLuint program, GLuint colorNumber, const char *name); -typedef void (APIENTRY *glUseProgram_t) (GLuint program); -typedef void (APIENTRY *glValidateProgram_t) (GLuint program); -typedef GLint (APIENTRY *glGetAttribLocation_t) (GLuint program, +#ifndef __native_client__ +typedef void (APIENTRY *glDeleteProgram_t) (GLuint program); +typedef GLuint (APIENTRY *glCreateProgram_t) (void); +typedef void (APIENTRY *glGetProgramiv_t) (GLuint program, + GLenum pname, GLint *params); +typedef void (APIENTRY *glLinkProgram_t) (GLuint program); +typedef void (APIENTRY *glAttachShader_t) (GLuint program, GLuint shader); +typedef void (APIENTRY *glGetShaderiv_t) (GLuint shader, + GLenum pname, GLint *params); +typedef void (APIENTRY *glCompileShader_t) (GLuint shader); +typedef void (APIENTRY *glShaderSource_t) (GLuint shader, + GLsizei count, const GLchar **string, const GLint *length); +typedef GLuint (APIENTRY *glCreateShader_t) (GLenum shaderType); +typedef GLint (APIENTRY *glGetUniformLocation_t) (GLuint program, const GLchar *name); +typedef void (APIENTRY *glGenBuffers_t) (GLsizei n, GLuint *buffers); +typedef void (APIENTRY *glDeleteBuffers_t) (GLsizei n, GLuint *buffers); +typedef void (APIENTRY *glBindBuffer_t) (GLenum target, GLuint buffer); +typedef void (APIENTRY *glBufferData_t) (GLenum target, GLsizeiptr size, + const GLvoid *data, GLenum usage); +typedef void (APIENTRY *glEnableVertexAttribArray_t) (GLuint index); +typedef void (APIENTRY *glVertexAttribPointer_t) (GLuint index, GLint size, + GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); +typedef void (APIENTRY *glUseProgram_t) (GLuint program); typedef void (APIENTRY *glUniform1f_t) (GLint location, GLfloat v0); typedef void (APIENTRY *glUniform2f_t) (GLint location, GLfloat v0, GLfloat v1); -typedef void (APIENTRY *glUniform3f_t) (GLint location, - GLfloat v0, GLfloat v1, GLfloat v2); typedef void (APIENTRY *glUniform4f_t) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -typedef GLenum (APIENTRY *glCheckFramebufferStatus_t) (GLenum target); +typedef void (APIENTRY *glValidateProgram_t) (GLuint program); typedef void (APIENTRY *glGetProgramInfoLog_t) (GLuint program, GLsizei maxLength, GLsizei *length, GLchar *infoLog); +typedef void (APIENTRY *glBindAttribLocation_t) (GLuint program, + GLuint index, const GLchar *name); +typedef void (APIENTRY *glActiveTexture_t) (GLenum texture); +#endif +typedef GLint (APIENTRY *glGetAttribLocation_t) (GLuint program, + const GLchar *name); +typedef void (APIENTRY *glUniform3f_t) (GLint location, + GLfloat v0, GLfloat v1, GLfloat v2); +typedef GLenum (APIENTRY *glCheckFramebufferStatus_t) (GLenum target); typedef void (APIENTRY *glProgramUniform1f_t) (GLuint program, GLint location, GLfloat v0); typedef void (APIENTRY *glProgramUniform2f_t) (GLuint program, @@ -185,9 +190,6 @@ typedef void (APIENTRY *glClearTexImage_t) (GLuint texture, GLint level, typedef void (APIENTRY *glClearTexSubImage_t) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * data); -typedef void (APIENTRY *glBindAttribLocation_t) (GLuint program, - GLuint index, const GLchar *name); -typedef void (APIENTRY *glActiveTexture_t) (GLenum texture); // callback typedef void (APIENTRY *GLDEBUGPROC_t) (GLenum source, GLenum type, GLuint id, diff --git a/src/render/mobileopengl2graphics.cpp b/src/render/mobileopengl2graphics.cpp index 90c145240..8a46f05fb 100644 --- a/src/render/mobileopengl2graphics.cpp +++ b/src/render/mobileopengl2graphics.cpp @@ -30,6 +30,9 @@ #include "logger.h" #include "render/mgl.h" +#ifdef __native_client__ +#include "render/naclglfunctions.h" +#endif #include "render/shaders/shaderprogram.h" #include "render/shaders/shadersmanager.h" diff --git a/src/render/mobileopenglgraphics.cpp b/src/render/mobileopenglgraphics.cpp index caba7a9e9..75d13f9cd 100644 --- a/src/render/mobileopenglgraphics.cpp +++ b/src/render/mobileopenglgraphics.cpp @@ -30,6 +30,9 @@ #include "logger.h" #include "render/mgl.h" +#ifdef __native_client__ +#include "render/naclglfunctions.h" +#endif #include "resources/image.h" #include "resources/imagerect.h" @@ -867,6 +870,7 @@ void MobileOpenGLGraphics::calcWindow(ImageCollection *const vertCol, calcImageRect(vert, x, y, w, h, imgRect); } + void MobileOpenGLGraphics::updateScreen() { BLOCK_START("Graphics::updateScreen") diff --git a/src/render/mobileopenglgraphics.h b/src/render/mobileopenglgraphics.h index 657581ac1..5011bae9e 100644 --- a/src/render/mobileopenglgraphics.h +++ b/src/render/mobileopenglgraphics.h @@ -55,6 +55,8 @@ class MobileOpenGLGraphics final : public Graphics ~MobileOpenGLGraphics(); + void postInit() override final; + inline void drawTriangleArrayfs(const GLshort *const shortVertArray, const GLfloat *const floatTexArray, const int size); @@ -65,8 +67,6 @@ class MobileOpenGLGraphics final : public Graphics inline void drawLineArrays(const int size); - void postInit() override final; - #include "render/graphicsdef.hpp" #include "render/openglgraphicsdef1.hpp" diff --git a/src/render/modernopenglgraphics.cpp b/src/render/modernopenglgraphics.cpp index e544254b4..8bfe30200 100644 --- a/src/render/modernopenglgraphics.cpp +++ b/src/render/modernopenglgraphics.cpp @@ -30,6 +30,9 @@ #include "logger.h" #include "render/mgl.h" +#ifdef __native_client__ +#include "render/naclglfunctions.h" +#endif #include "render/shaders/shaderprogram.h" #include "render/shaders/shadersmanager.h" diff --git a/src/render/naclgles.cpp b/src/render/naclgles.cpp new file mode 100644 index 000000000..ef53e6849 --- /dev/null +++ b/src/render/naclgles.cpp @@ -0,0 +1,49 @@ +/* + * The ManaPlus Client + * Copyright (C) 2015 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#if defined(__native_client__) && defined(USE_OPENGL) + +#include "render/naclgles.h" + +#include "logger.h" + +#include "render/mglfunctions.h" + +#include <ppapi_simple/ps.h> + +#include <ppapi/c/ppb_opengles2.h> + +#include <ppapi/gles2/gl2ext_ppapi.h> + +#include "debug.h" + +const struct PPB_OpenGLES2* gles2Interface = nullptr; +PP_Resource gles2Context = nullptr; + +void NaclGles::initGles() +{ + gles2Interface = static_cast<const PPB_OpenGLES2*>( + PSGetInterface(PPB_OPENGLES2_INTERFACE)); + gles2Context = glGetCurrentContextPPAPI(); + + logger->log("InitGles: %p, %d", gles2Interface, gles2Context); +} + +#endif // defined(__native_client__) && defined(USE_OPENGL) diff --git a/src/render/naclgles.h b/src/render/naclgles.h new file mode 100644 index 000000000..44b1a1f97 --- /dev/null +++ b/src/render/naclgles.h @@ -0,0 +1,34 @@ +/* + * The ManaPlus Client + * Copyright (C) 2014-2015 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef RENDER_NACLGLES_H +#define RENDER_NACLGLES_H + +#if defined(__native_client__) && defined(USE_OPENGL) + +#include <ppapi/c/ppb_opengles2.h> + +namespace NaclGles +{ + void initGles(); +} // namespace NaclGles + +#endif // defined(__native_client__) && defined(USE_OPENGL) +#endif // RENDER_NACLGLES_H diff --git a/src/render/shaders/shaderprogram.cpp b/src/render/shaders/shaderprogram.cpp index e910be3d3..4cb4786c8 100644 --- a/src/render/shaders/shaderprogram.cpp +++ b/src/render/shaders/shaderprogram.cpp @@ -23,6 +23,9 @@ #include "render/shaders/shaderprogram.h" #include "render/mgl.h" +#ifdef __native_client__ +#include "render/naclglfunctions.h" +#endif #include "render/shaders/shader.h" diff --git a/src/render/shaders/shadersmanager.cpp b/src/render/shaders/shadersmanager.cpp index c79abe2cc..9caed603d 100644 --- a/src/render/shaders/shadersmanager.cpp +++ b/src/render/shaders/shadersmanager.cpp @@ -26,6 +26,9 @@ #include "logger.h" #include "render/mgl.h" +#ifdef __native_client__ +#include "render/naclglfunctions.h" +#endif #include "render/shaders/shader.h" #include "render/shaders/shaderprogram.h" |