diff --git a/melonDS.cbp b/melonDS.cbp index b396861b..46345135 100644 --- a/melonDS.cbp +++ b/melonDS.cbp @@ -112,6 +112,8 @@ + + diff --git a/src/GPU3D_OpenGL43.cpp b/src/GPU3D_OpenGL43.cpp index 57a80f17..3a2a3f1c 100644 --- a/src/GPU3D_OpenGL43.cpp +++ b/src/GPU3D_OpenGL43.cpp @@ -16,77 +16,17 @@ with melonDS. If not, see http://www.gnu.org/licenses/. */ -#include -#include - #include #include #include "NDS.h" #include "GPU.h" -#include "Platform.h" +#include "OpenGLSupport.h" namespace GPU3D { namespace GLRenderer43 { -PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers; -PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers; -PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer; -PFNGLFRAMEBUFFERTEXTUREPROC glFramebufferTexture; -PFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer; - -PFNGLGENBUFFERSPROC glGenBuffers; -PFNGLDELETEBUFFERSPROC glDeleteBuffers; -PFNGLBINDBUFFERPROC glBindBuffer; -PFNGLMAPBUFFERPROC glMapBuffer; -PFNGLMAPBUFFERRANGEPROC glMapBufferRange; -PFNGLUNMAPBUFFERPROC glUnmapBuffer; -PFNGLBUFFERDATAPROC glBufferData; -PFNGLBUFFERSUBDATAPROC glBufferSubData; -PFNGLBINDBUFFERBASEPROC glBindBufferBase; - -PFNGLGENVERTEXARRAYSPROC glGenVertexArrays; -PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays; -PFNGLBINDVERTEXARRAYPROC glBindVertexArray; -PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray; -PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray; -PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer; -PFNGLVERTEXATTRIBIPOINTERPROC glVertexAttribIPointer; - -PFNGLCREATESHADERPROC glCreateShader; -PFNGLSHADERSOURCEPROC glShaderSource; -PFNGLCOMPILESHADERPROC glCompileShader; -PFNGLCREATEPROGRAMPROC glCreateProgram; -PFNGLATTACHSHADERPROC glAttachShader; -PFNGLLINKPROGRAMPROC glLinkProgram; -PFNGLUSEPROGRAMPROC glUseProgram; -PFNGLGETSHADERIVPROC glGetShaderiv; -PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog; -PFNGLGETPROGRAMIVPROC glGetProgramiv; -PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog; -PFNGLDELETESHADERPROC glDeleteShader; -PFNGLDELETEPROGRAMPROC glDeleteProgram; - -PFNGLUNIFORM1UIPROC glUniform1ui; -PFNGLUNIFORM4UIPROC glUniform4ui; -PFNGLUNIFORMBLOCKBINDINGPROC glUniformBlockBinding; - -PFNGLACTIVETEXTUREPROC glActiveTexture; -PFNGLBINDIMAGETEXTUREPROC glBindImageTexture; - -PFNGLDRAWBUFFERSPROC glDrawBuffers; - -PFNGLBLENDFUNCSEPARATEIPROC glBlendFuncSeparatei; -PFNGLBLENDEQUATIONSEPARATEIPROC glBlendEquationSeparatei; - -PFNGLCOLORMASKIPROC glColorMaski; - -PFNGLMEMORYBARRIERPROC glMemoryBarrier; - -PFNGLGETSTRINGIPROC glGetStringi; - - // GL version requirements // * explicit uniform location: 4.3 (or extension) // * texelFetch: 3.0 (GLSL 1.30) (3.2/1.50 for MS) @@ -792,67 +732,7 @@ bool ChunkedRendering = false; bool InitGLExtensions() { -#define LOADPROC(type, name) \ - name = (PFN##type##PROC)Platform::GL_GetProcAddress(#name); \ - if (!name) { printf("OpenGL: " #name " not found\n"); return false; } - - LOADPROC(GLGENFRAMEBUFFERS, glGenFramebuffers); - LOADPROC(GLDELETEFRAMEBUFFERS, glDeleteFramebuffers); - LOADPROC(GLBINDFRAMEBUFFER, glBindFramebuffer); - LOADPROC(GLFRAMEBUFFERTEXTURE, glFramebufferTexture); - LOADPROC(GLBLITFRAMEBUFFER, glBlitFramebuffer); - - LOADPROC(GLGENBUFFERS, glGenBuffers); - LOADPROC(GLDELETEBUFFERS, glDeleteBuffers); - LOADPROC(GLBINDBUFFER, glBindBuffer); - LOADPROC(GLMAPBUFFER, glMapBuffer); - LOADPROC(GLMAPBUFFERRANGE, glMapBufferRange); - LOADPROC(GLUNMAPBUFFER, glUnmapBuffer); - LOADPROC(GLBUFFERDATA, glBufferData); - LOADPROC(GLBUFFERSUBDATA, glBufferSubData); - LOADPROC(GLBINDBUFFERBASE, glBindBufferBase); - - LOADPROC(GLGENVERTEXARRAYS, glGenVertexArrays); - LOADPROC(GLDELETEVERTEXARRAYS, glDeleteVertexArrays); - LOADPROC(GLBINDVERTEXARRAY, glBindVertexArray); - LOADPROC(GLENABLEVERTEXATTRIBARRAY, glEnableVertexAttribArray); - LOADPROC(GLDISABLEVERTEXATTRIBARRAY, glDisableVertexAttribArray); - LOADPROC(GLVERTEXATTRIBPOINTER, glVertexAttribPointer); - LOADPROC(GLVERTEXATTRIBIPOINTER, glVertexAttribIPointer); - - LOADPROC(GLCREATESHADER, glCreateShader); - LOADPROC(GLSHADERSOURCE, glShaderSource); - LOADPROC(GLCOMPILESHADER, glCompileShader); - LOADPROC(GLCREATEPROGRAM, glCreateProgram); - LOADPROC(GLATTACHSHADER, glAttachShader); - LOADPROC(GLLINKPROGRAM, glLinkProgram); - LOADPROC(GLUSEPROGRAM, glUseProgram); - LOADPROC(GLGETSHADERIV, glGetShaderiv); - LOADPROC(GLGETSHADERINFOLOG, glGetShaderInfoLog); - LOADPROC(GLGETPROGRAMIV, glGetProgramiv); - LOADPROC(GLGETPROGRAMINFOLOG, glGetProgramInfoLog); - LOADPROC(GLDELETESHADER, glDeleteShader); - LOADPROC(GLDELETEPROGRAM, glDeleteProgram); - - LOADPROC(GLUNIFORM1UI, glUniform1ui); - LOADPROC(GLUNIFORM4UI, glUniform4ui); - LOADPROC(GLUNIFORMBLOCKBINDING, glUniformBlockBinding); - - LOADPROC(GLACTIVETEXTURE, glActiveTexture); - LOADPROC(GLBINDIMAGETEXTURE, glBindImageTexture); - - LOADPROC(GLDRAWBUFFERS, glDrawBuffers); - - LOADPROC(GLBLENDFUNCSEPARATEI, glBlendFuncSeparatei); - LOADPROC(GLBLENDEQUATIONSEPARATEI, glBlendEquationSeparatei); - - LOADPROC(GLCOLORMASKI, glColorMaski); - - LOADPROC(GLMEMORYBARRIER, glMemoryBarrier); - - LOADPROC(GLGETSTRINGI, glGetStringi); - -#undef LOADPROC + if (!OpenGL_Init()) return false; return true; } diff --git a/src/OpenGLSupport.cpp b/src/OpenGLSupport.cpp new file mode 100644 index 00000000..c22fd1c4 --- /dev/null +++ b/src/OpenGLSupport.cpp @@ -0,0 +1,30 @@ +/* + Copyright 2016-2019 Arisotura + + This file is part of melonDS. + + melonDS 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 3 of the License, or (at your option) + any later version. + + melonDS 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 melonDS. If not, see http://www.gnu.org/licenses/. +*/ + +#include "OpenGLSupport.h" + + +DO_PROCLIST(DECLPROC); + + +bool OpenGL_Init() +{ + DO_PROCLIST(LOADPROC); + + return true; +} diff --git a/src/OpenGLSupport.h b/src/OpenGLSupport.h new file mode 100644 index 00000000..10ba1e5e --- /dev/null +++ b/src/OpenGLSupport.h @@ -0,0 +1,112 @@ +/* + Copyright 2016-2019 Arisotura + + This file is part of melonDS. + + melonDS 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 3 of the License, or (at your option) + any later version. + + melonDS 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 melonDS. If not, see http://www.gnu.org/licenses/. +*/ + +#ifndef OPENGLSUPPORT_H +#define OPENGLSUPPORT_H + +#include +#include +#include + +#include "Platform.h" + + +// here, have some macro magic +// we at the melonDS company really love macro magic +// also, suggestion to the fine folks who write the OpenGL headers: +// pls make the type names follow the same capitalization as their +// matching function names, so this is more convenient to deal with + +#define DECLPROC(type, name) \ + PFN##type##PROC name ; + +#define DECLPROC_EXT(type, name) \ + extern PFN##type##PROC name ; + +#define LOADPROC(type, name) \ + name = (PFN##type##PROC)Platform::GL_GetProcAddress(#name); \ + if (!name) { printf("OpenGL: " #name " not found\n"); return false; } + + +// if you need more OpenGL functions, add them to the macronator here +// TODO: handle conditionally loading certain functions for different GL versions + +#define DO_PROCLIST(func) \ + func(GLGENFRAMEBUFFERS, glGenFramebuffers); \ + func(GLDELETEFRAMEBUFFERS, glDeleteFramebuffers); \ + func(GLBINDFRAMEBUFFER, glBindFramebuffer); \ + func(GLFRAMEBUFFERTEXTURE, glFramebufferTexture); \ + func(GLBLITFRAMEBUFFER, glBlitFramebuffer); \ + \ + func(GLGENBUFFERS, glGenBuffers); \ + func(GLDELETEBUFFERS, glDeleteBuffers); \ + func(GLBINDBUFFER, glBindBuffer); \ + func(GLMAPBUFFER, glMapBuffer); \ + func(GLMAPBUFFERRANGE, glMapBufferRange); \ + func(GLUNMAPBUFFER, glUnmapBuffer); \ + func(GLBUFFERDATA, glBufferData); \ + func(GLBUFFERSUBDATA, glBufferSubData); \ + func(GLBINDBUFFERBASE, glBindBufferBase); \ + \ + func(GLGENVERTEXARRAYS, glGenVertexArrays); \ + func(GLDELETEVERTEXARRAYS, glDeleteVertexArrays); \ + func(GLBINDVERTEXARRAY, glBindVertexArray); \ + func(GLENABLEVERTEXATTRIBARRAY, glEnableVertexAttribArray); \ + func(GLDISABLEVERTEXATTRIBARRAY, glDisableVertexAttribArray); \ + func(GLVERTEXATTRIBPOINTER, glVertexAttribPointer); \ + func(GLVERTEXATTRIBIPOINTER, glVertexAttribIPointer); \ + \ + func(GLCREATESHADER, glCreateShader); \ + func(GLSHADERSOURCE, glShaderSource); \ + func(GLCOMPILESHADER, glCompileShader); \ + func(GLCREATEPROGRAM, glCreateProgram); \ + func(GLATTACHSHADER, glAttachShader); \ + func(GLLINKPROGRAM, glLinkProgram); \ + func(GLUSEPROGRAM, glUseProgram); \ + func(GLGETSHADERIV, glGetShaderiv); \ + func(GLGETSHADERINFOLOG, glGetShaderInfoLog); \ + func(GLGETPROGRAMIV, glGetProgramiv); \ + func(GLGETPROGRAMINFOLOG, glGetProgramInfoLog); \ + func(GLDELETESHADER, glDeleteShader); \ + func(GLDELETEPROGRAM, glDeleteProgram); \ + \ + func(GLUNIFORM1UI, glUniform1ui); \ + func(GLUNIFORM4UI, glUniform4ui); \ + func(GLUNIFORMBLOCKBINDING, glUniformBlockBinding); \ + \ + func(GLACTIVETEXTURE, glActiveTexture); \ + func(GLBINDIMAGETEXTURE, glBindImageTexture); \ + \ + func(GLDRAWBUFFERS, glDrawBuffers); \ + \ + func(GLBLENDFUNCSEPARATEI, glBlendFuncSeparatei); \ + func(GLBLENDEQUATIONSEPARATEI, glBlendEquationSeparatei); \ + \ + func(GLCOLORMASKI, glColorMaski); \ + \ + func(GLMEMORYBARRIER, glMemoryBarrier); \ + \ + func(GLGETSTRINGI, glGetStringi); \ + + +DO_PROCLIST(DECLPROC_EXT); + + +bool OpenGL_Init(); + +#endif // OPENGLSUPPORT_H diff --git a/src/libui_sdl/libui/windows/areadraw.cpp b/src/libui_sdl/libui/windows/areadraw.cpp index 6b4845aa..f369255e 100644 --- a/src/libui_sdl/libui/windows/areadraw.cpp +++ b/src/libui_sdl/libui/windows/areadraw.cpp @@ -9,7 +9,7 @@ static HRESULT doPaint(uiArea *a, ID2D1RenderTarget *rt, RECT *clip) if (a->openGL) { - (*(ah->Draw))(ah, a, &dp); + //(*(ah->Draw))(ah, a, &dp); return S_OK; }