diff --git a/Readme.md b/Readme.md new file mode 100644 index 0000000..defe72f --- /dev/null +++ b/Readme.md @@ -0,0 +1,5 @@ +# Script to run: + +``` +emcc main.cpp Game.cpp Math.cpp Physics.cpp Renderer.cpp ShaderManager.cpp TextureManager.cpp Utils.cpp OpenGlExtensions.cpp -O2 -std=c++14 -sTOTAL_MEMORY=33554432 -sUSE_SDL_IMAGE=2 -sSDL2_IMAGE_FORMATS="[""png""]" -sUSE_SDL=2 --preload-file background.bmp --preload-file bird.bmp32 --preload-file default.fragment --preload-file default.vertex --preload-file game_over.bmp32 --preload-file pipe.bmp32 -o jumpingbird.html +``` \ No newline at end of file diff --git a/ShaderManager.cpp b/ShaderManager.cpp index cdfd466..9d606de 100755 --- a/ShaderManager.cpp +++ b/ShaderManager.cpp @@ -38,11 +38,12 @@ namespace ZL { glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &fragmentShaderCompiled); glGetShaderInfoLog(fragmentShader, CONST_INFOLOG_LENGTH, &infoLogLength, infoLog); + if (!vertexShaderCompiled) { throw std::runtime_error("Failed to compile vertex shader code!"); } - + if (!fragmentShaderCompiled) { throw std::runtime_error("Failed to compile fragment shader code!"); @@ -60,7 +61,7 @@ namespace ZL { glGetProgramiv(shaderProgram, GL_LINK_STATUS, &programLinked); glGetProgramInfoLog(shaderProgram, CONST_INFOLOG_LENGTH, &infoLogLength, infoLog); - + if (!programLinked) { shaderProgram = 0; diff --git a/background.bmp b/background.bmp index d0bed1a..5882a9d 100755 Binary files a/background.bmp and b/background.bmp differ diff --git a/default.fragment b/default.fragment index f47edba..40c4643 100755 --- a/default.fragment +++ b/default.fragment @@ -1,3 +1,4 @@ +precision mediump float; uniform sampler2D Texture; varying vec2 texCoord; diff --git a/game_over.bmp32 b/game_over.bmp32 index 7747873..c25f2da 100755 Binary files a/game_over.bmp32 and b/game_over.bmp32 differ diff --git a/main.cpp b/main.cpp index e605472..9118e25 100755 --- a/main.cpp +++ b/main.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include "Game.h" @@ -124,7 +125,7 @@ namespace ZL glClearColor(0.0f, 0.0f, 0.0f, 1.0f); glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); - + glViewport(0, 0, Env::width, Env::height); renderer.shaderManager.PushShader(defaultShaderName); @@ -151,7 +152,7 @@ namespace ZL renderer.DisableVertexAttribArray(vPositionName); renderer.shaderManager.PopShader(); - + CheckGlError(); } @@ -186,14 +187,23 @@ namespace ZL void setup() { + static const int BACKGROUND_WIDTH = 900; + static const int BACKGROUND_HEIGHT = 504; + + static const int PIPE_WIDTH = 244; + static const int PIPE_HEIGHT = 1500; + + static const int GAMEOVER_WIDTH = 1400; + static const int GAMEOVER_HEIGHT = 720; ZL::BindOpenGlFunctions(); CheckGlError(); + //Load shaders: renderer.shaderManager.AddShaderFromFiles("default", "./default.vertex", "./default.fragment"); - + //Load textures GameObjects::birdTexturePtr = std::make_shared(CreateTextureDataFromBmp32("./bird.bmp32")); GameObjects::backgroundTexturePtr = std::make_shared(CreateTextureDataFromBmp24("./background.bmp")); @@ -205,26 +215,26 @@ namespace ZL //Create bird mesh GameObjects::birdMesh = CreateRect2D({ 0.f, 0.f }, { GameConsts::birdScale * GameObjects::birdTexturePtr->getWidth(), GameConsts::birdScale * GameObjects::birdTexturePtr->getHeight() }, 0); - float backgroundTextureScale = Env::height / static_cast(GameObjects::backgroundTexturePtr->getHeight()); + float backgroundTextureScale = Env::height / static_cast(BACKGROUND_HEIGHT); //Create pipe mesh - GameObjects::pipeMesh = CreateRect2D({ GameObjects::pipeTexturePtr->getWidth() * GameConsts::pipeScale * (-0.5f), Env::getActualClientHeight() * 0.5f + GameObjects::pipeTexturePtr->getHeight() * GameConsts::pipeScale * (-0.5f) }, { GameObjects::pipeTexturePtr->getWidth() * GameConsts::pipeScale * 0.5f, GameObjects::pipeTexturePtr->getHeight() * GameConsts::pipeScale * 0.5f }, 0); + GameObjects::pipeMesh = CreateRect2D({ PIPE_WIDTH * GameConsts::pipeScale * (-0.5f), Env::getActualClientHeight() * 0.5f + PIPE_HEIGHT * GameConsts::pipeScale * (-0.5f) }, { PIPE_WIDTH * GameConsts::pipeScale * 0.5f, PIPE_HEIGHT * GameConsts::pipeScale * 0.5f }, 0); //Create background mesh depending on screen size - Env::backgroundSectionWidth = GameObjects::backgroundTexturePtr->getWidth() * backgroundTextureScale; + Env::backgroundSectionWidth = BACKGROUND_HEIGHT * backgroundTextureScale; - GameObjects::backgroundMesh = CreateRectHorizontalSections2D({ GameObjects::backgroundTexturePtr->getWidth() * backgroundTextureScale * (0.5f), GameObjects::backgroundTexturePtr->getHeight() * backgroundTextureScale * (0.5f) }, { GameObjects::backgroundTexturePtr->getWidth() * backgroundTextureScale * 0.5f, GameObjects::backgroundTexturePtr->getHeight() * backgroundTextureScale * 0.5f }, 0, 2); + GameObjects::backgroundMesh = CreateRectHorizontalSections2D({ BACKGROUND_WIDTH * backgroundTextureScale * (0.5f), BACKGROUND_HEIGHT * backgroundTextureScale * (0.5f) }, { BACKGROUND_WIDTH * backgroundTextureScale * 0.5f, BACKGROUND_HEIGHT * backgroundTextureScale * 0.5f }, 0, 2); CheckGlError(); //Create Game Over UI mesh depending on screen size - float gameOverTextureScale = Env::height / static_cast(GameObjects::gameOverTexturePtr->getHeight()); + float gameOverTextureScale = Env::height / static_cast(GAMEOVER_HEIGHT); - GameObjects::gameOverMesh = CreateRect2D({ GameObjects::gameOverTexturePtr->getWidth() * gameOverTextureScale * 0.5f, GameObjects::gameOverTexturePtr->getHeight() * gameOverTextureScale * 0.5f }, { GameObjects::gameOverTexturePtr->getWidth() * gameOverTextureScale * 0.5f, GameObjects::gameOverTexturePtr->getHeight() * gameOverTextureScale * 0.5f }, 0.1f); + GameObjects::gameOverMesh = CreateRect2D({ GAMEOVER_WIDTH * gameOverTextureScale * 0.5f, GAMEOVER_HEIGHT * gameOverTextureScale * 0.5f }, { GAMEOVER_WIDTH * gameOverTextureScale * 0.5f, GAMEOVER_HEIGHT * gameOverTextureScale * 0.5f }, 0.1f); @@ -248,7 +258,7 @@ namespace ZL CheckGlError(); - glClearColor(1.0f, 0.0f, 0.0f, 1.0f); + glClearColor(0.0f, 0.0f, 0.0f, 1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); DrawScene(); @@ -285,14 +295,6 @@ namespace ZL int main(int argc, char* argv[]) { -#ifdef EMSCRIPTEN - SDL_Renderer* renderer = NULL; - 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()); - return 1; - } constexpr int CONST_WIDTH = 1280; constexpr int CONST_HEIGHT = 720; @@ -300,14 +302,25 @@ int main(int argc, char* argv[]) ZL::Env::width = CONST_WIDTH; ZL::Env::height = CONST_HEIGHT; - +#ifdef EMSCRIPTEN + 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); + SDL_Renderer* renderer = NULL; + SDL_CreateWindowAndRenderer(CONST_WIDTH, CONST_HEIGHT, 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()); + return 1; + } + // Use a core profile setup. 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("Jumping Bird", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, CONST_WIDTH, CONST_HEIGHT, SDL_WINDOW_OPENGL); - +#endif //todo ZL::Env::windowHeaderHeight = 0; @@ -315,8 +328,6 @@ int main(int argc, char* argv[]) ZL::CheckGlError(); - -#endif ZL::setup(); #ifdef EMSCRIPTEN // register update as callback diff --git a/pipe.bmp32 b/pipe.bmp32 index 80f6c6f..c99f0a9 100755 Binary files a/pipe.bmp32 and b/pipe.bmp32 differ