From cb9f6c69324f5a1cd45a4635c7b0e698d8076f18 Mon Sep 17 00:00:00 2001 From: Vladislav Khorev Date: Sun, 3 Dec 2023 21:36:04 +0300 Subject: [PATCH] SDL compiling for Emscripten --- Math.cpp | 2 +- Math.h | 3 +++ OpenGlExtensions.cpp | 28 +++++++++++----------------- OpenGlExtensions.h | 19 +++++++++++++++++++ Renderer.cpp | 37 +++++++++++++++++++++---------------- Renderer.h | 3 ++- ShaderManager.cpp | 14 +++++++------- TextureManager.cpp | 10 +++++----- Utils.h | 3 +++ main.cpp | 7 ++----- 10 files changed, 74 insertions(+), 52 deletions(-) diff --git a/Math.cpp b/Math.cpp index 856ce0a..48f2846 100755 --- a/Math.cpp +++ b/Math.cpp @@ -86,7 +86,7 @@ namespace ZL { if (depthRange <= 0) { - throw std::exception("zFar must be greater than zNear"); + throw std::runtime_error("zFar must be greater than zNear"); } Matrix4f r; diff --git a/Math.h b/Math.h index e8735e6..8d7c69e 100755 --- a/Math.h +++ b/Math.h @@ -1,6 +1,9 @@ #pragma once #include +#include +#include + namespace ZL { diff --git a/OpenGlExtensions.cpp b/OpenGlExtensions.cpp index 0ae3156..511a484 100755 --- a/OpenGlExtensions.cpp +++ b/OpenGlExtensions.cpp @@ -2,6 +2,8 @@ #include "Utils.h" +#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) + //==================================================== //===================== GLSL Shaders ================= //==================================================== @@ -112,10 +114,13 @@ PFNGLGENVERTEXARRAYSPROC glGenVertexArrays = NULL; PFNGLBINDVERTEXARRAYPROC glBindVertexArray = NULL; PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArray = NULL; +#endif + namespace ZL { bool BindOpenGlFunctions() { +#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) //char* extensionList = (char*)glGetString(GL_EXTENSIONS); char* glVersion = (char*)glGetString(GL_VERSION); bool ok = true; @@ -231,8 +236,7 @@ namespace ZL { ok = false; } - //if (findString("GL_ARB_framebuffer_object", extensionList)) - { + glIsRenderbuffer = (PFNGLISRENDERBUFFERPROC)wglGetProcAddress("glIsRenderbuffer"); glBindRenderbuffer = (PFNGLBINDRENDERBUFFERPROC)wglGetProcAddress("glBindRenderbuffer"); glDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSPROC)wglGetProcAddress("glDeleteRenderbuffers"); @@ -279,15 +283,6 @@ namespace ZL { } - } - /*else - { - ok = false; - }*/ - - //if (findString("GL_ARB_uniform_buffer_object", extensionList)) - { - glGetUniformIndices = (PFNGLGETUNIFORMINDICESPROC)wglGetProcAddress("glGetUniformIndices"); glGetActiveUniformsiv = (PFNGLGETACTIVEUNIFORMSIVPROC)wglGetProcAddress("glGetActiveUniformsiv"); glGetActiveUniformName = (PFNGLGETACTIVEUNIFORMNAMEPROC)wglGetProcAddress("glGetActiveUniformName"); @@ -308,11 +303,7 @@ namespace ZL { { ok = false; } - } - /*else - { - ok = false; - }*/ + glGenVertexArrays = (PFNGLGENVERTEXARRAYSPROC)wglGetProcAddress("glGenVertexArrays"); glBindVertexArray = (PFNGLBINDVERTEXARRAYPROC)wglGetProcAddress("glBindVertexArray"); @@ -327,6 +318,9 @@ namespace ZL { return ok; +#else + return true; +#endif } void CheckGlError() @@ -335,7 +329,7 @@ namespace ZL { if (error != GL_NO_ERROR) { - throw std::exception("Gl error"); + throw std::runtime_error("Gl error"); } } } diff --git a/OpenGlExtensions.h b/OpenGlExtensions.h index 0005252..6d5cf5e 100755 --- a/OpenGlExtensions.h +++ b/OpenGlExtensions.h @@ -1,5 +1,20 @@ #pragma once + +#include "SDL.h" +#ifdef EMSCRIPTEN +//#define GL_GLEXT_PROTOTYPES 1 +//#define EGL_EGLEXT_PROTOTYPES 1 +//#include +#include +#include "emscripten.h" +#endif + + +#include +#include +#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) + #include "windows.h" #define GET_X_LPARAM(lp) ((int)(short)LOWORD(lp)) @@ -126,9 +141,13 @@ extern PFNGLBINDBUFFERBASEPROC glBindBufferBase; extern PFNGLGENVERTEXARRAYSPROC glGenVertexArrays; extern PFNGLBINDVERTEXARRAYPROC glBindVertexArray; extern PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArray; +#else +#endif namespace ZL { + + bool BindOpenGlFunctions(); void CheckGlError(); diff --git a/Renderer.cpp b/Renderer.cpp index 23726de..7f051d2 100755 --- a/Renderer.cpp +++ b/Renderer.cpp @@ -21,13 +21,16 @@ namespace ZL { VAOHolder::VAOHolder() { +#ifndef EMSCRIPTEN glGenVertexArrays(1, &vao); +#endif } VAOHolder::~VAOHolder() { +#ifndef EMSCRIPTEN glDeleteVertexArray(1, &vao); - //glDeleteBuffers(1, &Buffer); +#endif } GLuint VAOHolder::getBuffer() @@ -122,13 +125,14 @@ namespace ZL { { //Check if main thread, check if data is not empty... +#ifndef EMSCRIPTEN if (!vao) { vao = std::make_shared(); } glBindVertexArray(vao->getBuffer()); - +#endif if (!positionVBO) { positionVBO = std::make_shared(); @@ -159,8 +163,9 @@ namespace ZL { glActiveTexture(GL_TEXTURE0); +#ifndef EMSCRIPTEN glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - +#endif glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glDepthFunc(GL_LEQUAL); @@ -176,7 +181,7 @@ namespace ZL { if (ProjectionMatrixStack.size() > CONST_MATRIX_STACK_SIZE) { - throw std::exception("Projection matrix stack overflow!!!!"); + throw std::runtime_error("Projection matrix stack overflow!!!!"); } } @@ -185,7 +190,7 @@ namespace ZL { { if (ProjectionMatrixStack.size() == 0) { - throw std::exception("Projection matrix stack underflow!!!!"); + throw std::runtime_error("Projection matrix stack underflow!!!!"); } ProjectionMatrixStack.pop(); SetMatrix(); @@ -196,12 +201,12 @@ namespace ZL { { if (ProjectionMatrixStack.size() <= 0) { - throw std::exception("Projection matrix stack out!"); + throw std::runtime_error("Projection matrix stack out!"); } if (ModelviewMatrixStack.size() <= 0) { - throw std::exception("Modelview matrix stack out!"); + throw std::runtime_error("Modelview matrix stack out!"); } ProjectionModelViewMatrix = ProjectionMatrixStack.top() * ModelviewMatrixStack.top(); @@ -220,14 +225,14 @@ namespace ZL { { if (ModelviewMatrixStack.size() == 0) { - throw std::exception("Modelview matrix stack underflow!!!!"); + throw std::runtime_error("Modelview matrix stack underflow!!!!"); } ModelviewMatrixStack.push(ModelviewMatrixStack.top()); if (ModelviewMatrixStack.size() > CONST_MATRIX_STACK_SIZE) { - throw std::exception("Modelview matrix stack overflow!!!!"); + throw std::runtime_error("Modelview matrix stack overflow!!!!"); } } @@ -235,7 +240,7 @@ namespace ZL { { if (ModelviewMatrixStack.size() == 0) { - throw std::exception("Modelview matrix stack underflow!!!!"); + throw std::runtime_error("Modelview matrix stack underflow!!!!"); } ModelviewMatrixStack.pop(); @@ -256,7 +261,7 @@ namespace ZL { if (ModelviewMatrixStack.size() == 0) { - throw std::exception("Modelview matrix stack underflow!!!!"); + throw std::runtime_error("Modelview matrix stack underflow!!!!"); } ModelviewMatrixStack.pop(); @@ -276,7 +281,7 @@ namespace ZL { if (ModelviewMatrixStack.size() == 0) { - throw std::exception("Modelview matrix stack underflow!!!!"); + throw std::runtime_error("Modelview matrix stack underflow!!!!"); } ModelviewMatrixStack.pop(); @@ -296,7 +301,7 @@ namespace ZL { if (ModelviewMatrixStack.size() == 0) { - throw std::exception("Modelview matrix stack underflow!!!!"); + throw std::runtime_error("Modelview matrix stack underflow!!!!"); } ModelviewMatrixStack.pop(); @@ -326,7 +331,7 @@ namespace ZL { if (ModelviewMatrixStack.size() == 0) { - throw std::exception("Modelview matrix stack underflow!!!!"); + throw std::runtime_error("Modelview matrix stack underflow!!!!"); } ModelviewMatrixStack.pop(); @@ -340,7 +345,7 @@ namespace ZL { { if (ModelviewMatrixStack.size() > 64) { - throw std::exception("Modelview matrix stack overflow!!!!"); + throw std::runtime_error("Modelview matrix stack overflow!!!!"); } ModelviewMatrixStack.push(m); SetMatrix(); @@ -351,7 +356,7 @@ namespace ZL { { if (ModelviewMatrixStack.size() == 0) { - throw std::exception("Modelview matrix stack underflow!!!!"); + throw std::runtime_error("Modelview matrix stack underflow!!!!"); } ModelviewMatrixStack.pop(); diff --git a/Renderer.h b/Renderer.h index 8036342..fce7c98 100755 --- a/Renderer.h +++ b/Renderer.h @@ -2,7 +2,8 @@ #include "OpenGlExtensions.h" #include "Math.h" - +#include +#include #include "ShaderManager.h" namespace ZL { diff --git a/ShaderManager.cpp b/ShaderManager.cpp index ec4ae00..cdfd466 100755 --- a/ShaderManager.cpp +++ b/ShaderManager.cpp @@ -40,12 +40,12 @@ namespace ZL { if (!vertexShaderCompiled) { - throw std::exception("Failed to compile vertex shader code!"); + throw std::runtime_error("Failed to compile vertex shader code!"); } if (!fragmentShaderCompiled) { - throw std::exception("Failed to compile fragment shader code!"); + throw std::runtime_error("Failed to compile fragment shader code!"); } shaderProgram = glCreateProgram(); @@ -64,7 +64,7 @@ namespace ZL { if (!programLinked) { shaderProgram = 0; - throw std::exception("Failed to link shader program!"); + throw std::runtime_error("Failed to link shader program!"); } @@ -133,12 +133,12 @@ namespace ZL { { if (shaderStack.size() >= CONST_MAX_SHADER_STACK_SIZE) { - throw std::exception("Shader stack overflow!"); + throw std::runtime_error("Shader stack overflow!"); } if (shaderResourceMap.find(shaderName) == shaderResourceMap.end()) { - throw std::exception("Shader does not exist!"); + throw std::runtime_error("Shader does not exist!"); } shaderStack.push(shaderName); @@ -151,7 +151,7 @@ namespace ZL { { if (shaderStack.size() == 0) { - throw std::exception("Shader stack underflow!"); + throw std::runtime_error("Shader stack underflow!"); } shaderStack.pop(); @@ -170,7 +170,7 @@ namespace ZL { { if (shaderStack.size() == 0) { - throw std::exception("Shader stack underflow!"); + throw std::runtime_error("Shader stack underflow!"); } diff --git a/TextureManager.cpp b/TextureManager.cpp index df3fd6e..f7c7a08 100755 --- a/TextureManager.cpp +++ b/TextureManager.cpp @@ -13,7 +13,7 @@ namespace ZL if (texID == 0) { - throw std::exception("glGenTextures did not work"); + throw std::runtime_error("glGenTextures did not work"); } glBindTexture(GL_TEXTURE_2D, texID); @@ -77,7 +77,7 @@ namespace ZL if (fileSize < 22) { - throw std::exception("File is too short or not correct!"); + throw std::runtime_error("File is too short or not correct!"); } //This refers to BITMAPV5HEADER @@ -99,7 +99,7 @@ namespace ZL if (pos + 3 > fileSize) { - throw std::exception("File is too short!"); + throw std::runtime_error("File is too short!"); } @@ -125,7 +125,7 @@ namespace ZL if (fileSize < 22) { - throw std::exception("File is too short or not correct!"); + throw std::runtime_error("File is too short or not correct!"); } //This refers to BITMAPV5HEADER @@ -147,7 +147,7 @@ namespace ZL if (pos + 4 > fileSize) { - throw std::exception("File is too short!"); + throw std::runtime_error("File is too short!"); } diff --git a/Utils.h b/Utils.h index 06c03d5..97df7aa 100755 --- a/Utils.h +++ b/Utils.h @@ -2,6 +2,9 @@ #include #include +#include +#include +#include namespace ZL { diff --git a/main.cpp b/main.cpp index b617f17..e605472 100755 --- a/main.cpp +++ b/main.cpp @@ -5,9 +5,6 @@ #include "Physics.h" #include -//#include -#include "SDL.h" -//#include "SDL_image.h" #include #include @@ -290,7 +287,7 @@ int main(int argc, char* argv[]) { #ifdef EMSCRIPTEN SDL_Renderer* renderer = NULL; - SDL_CreateWindowAndRenderer(512, 512, SDL_WINDOW_OPENGL, &window, &renderer); + SDL_CreateWindowAndRenderer(512, 512, SDL_WINDOW_OPENGL, &ZL::window, &renderer); #else if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTS) != 0) { SDL_Log("Failed to initialize SDL: %s", SDL_GetError()); @@ -309,7 +306,7 @@ int main(int argc, char* argv[]) SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3); SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); - ZL::window = SDL_CreateWindow("title", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, CONST_WIDTH, CONST_HEIGHT, SDL_WINDOW_OPENGL); + ZL::window = SDL_CreateWindow("Jumping Bird", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, CONST_WIDTH, CONST_HEIGHT, SDL_WINDOW_OPENGL); //todo ZL::Env::windowHeaderHeight = 0;