From 724549b542b8b28850a3fe3d6e0024cbb0ba4cf9 Mon Sep 17 00:00:00 2001 From: cinnaboot Date: Mon, 11 Jun 2018 07:35:16 -0400 Subject: [PATCH] added SDL_image for loading png/jpeg files --- data/coords.layout.flat.png | Bin 0 -> 13323 bytes src/Makefile | 4 ++++ src/gooey.h | 11 ++++++----- src/hexgame.cpp | 22 ++++++++++++++++++++++ src/renderer.h | 28 ++++++++++++++++++++++++++++ 5 files changed, 60 insertions(+), 5 deletions(-) create mode 100644 data/coords.layout.flat.png diff --git a/data/coords.layout.flat.png b/data/coords.layout.flat.png new file mode 100644 index 0000000000000000000000000000000000000000..37b3e9b22529f40098f983ca48acc1b065b54b27 GIT binary patch literal 13323 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 literal 0 HcmV?d00001 diff --git a/src/Makefile b/src/Makefile index 9cfc674..17968cf 100644 --- a/src/Makefile +++ b/src/Makefile @@ -21,6 +21,10 @@ OBJECTS += $(IMGUI_DIR)/imgui.o $(IMGUI_DIR)/imgui_demo.o $(IMGUI_DIR)/imgui_dra # don't know a good way to require this in make without forcing a specific version LDFLAGS = -lSDL2 -lGLEW -lGL +# SDL2_image +CXXFLAGS += $(shell pkg-config --cflags SDL2_image) +LDFLAGS += $(shell pkg-config --libs SDL2_image) + # TODO: only needed for gl3w, remove later LDFLAGS += -ldl diff --git a/src/gooey.h b/src/gooey.h index 7ac202e..c39918b 100644 --- a/src/gooey.h +++ b/src/gooey.h @@ -51,7 +51,6 @@ renderGooey(SDL_Handles &handles, HexDrawMode &mode, bool &is_debug, { ImGui_ImplSdlGL3_NewFrame(handles.window); -#if 1 ImGuiWindowFlags window_flags = 0; window_flags |= ImGuiWindowFlags_NoTitleBar; window_flags |= ImGuiWindowFlags_NoScrollbar; @@ -60,11 +59,10 @@ renderGooey(SDL_Handles &handles, HexDrawMode &mode, bool &is_debug, window_flags |= ImGuiWindowFlags_NoCollapse; ImGui::SetNextWindowPos(ImVec2(0,0)); - ImGui::SetNextWindowSize(ImVec2(300, 250)); + ImGui::SetNextWindowSize(ImVec2(300, 550)); ImGui::SetNextWindowBgAlpha(0.3f); bool show_window; ImGui::Begin("", &show_window, window_flags); -#endif ImGuiIO& io = ImGui::GetIO(); ImGui::Text("%.3f ms/frame, (%.1f FPS)", 1000.0f / io.Framerate, io.Framerate); @@ -84,6 +82,11 @@ renderGooey(SDL_Handles &handles, HexDrawMode &mode, bool &is_debug, ImGui::Text("is_selecting"); ImGui::SameLine(); ImGui::TextUnformatted(is_selecting ? "true" : "false"); + // testing SDL_image + SDL_Surface* image = handles.texSurfaces[0]; + ImGui::Image((void*)(intptr_t) image->userdata, ImVec2(image->w, image->h)); + //ImGui::ShowMetricsWindow(); + if (current_hex) { Hex ch = current_hex->hex; @@ -96,10 +99,8 @@ renderGooey(SDL_Handles &handles, HexDrawMode &mode, bool &is_debug, } ImGui::End(); - ImGui::Render(); ImGui_ImplSdlGL3_RenderDrawData(ImGui::GetDrawData()); - } #endif // GOOEY_H diff --git a/src/hexgame.cpp b/src/hexgame.cpp index f7d2f52..26ba44e 100644 --- a/src/hexgame.cpp +++ b/src/hexgame.cpp @@ -19,6 +19,7 @@ #endif #include +#include #include "hexgame.h" #include "hexlib.h" @@ -352,6 +353,7 @@ cleanUp(SDL_Handles &handles) freeBuffers(); // renderer.h for (SDL_Surface *surface : handles.texSurfaces) SDL_FreeSurface(surface); + IMG_Quit(); // SDL_image SDL_GL_DeleteContext(handles.glContext); SDL_DestroyWindow(handles.window); SDL_Quit(); @@ -407,6 +409,26 @@ int main(int argc, char* argv[]) LOG(ERROR) << "Unable to initialize graphics, exiting\n"; return 1; } + + { + // load support for the JPG and PNG image formats + int flags=IMG_INIT_JPG|IMG_INIT_PNG; + int initted=IMG_Init(flags); + if((initted&flags) != flags) + { + LOG(ERROR) << "IMG_Init: Failed to init required jpg and png support!\n"; + LOG(ERROR) << "IMG_Init: " << IMG_GetError() << "\n"; + return 1; + } + + // pre-load textures + std::string path = "../data/coords.layout.flat.png"; + if (!addTexture(handles, path)) + { + LOG(ERROR) << "Error adding " << path << "\n"; + return 1; + } + } if (!createScene(g_game_state->hex_array)) { diff --git a/src/renderer.h b/src/renderer.h index 99507bf..ef3cbfa 100644 --- a/src/renderer.h +++ b/src/renderer.h @@ -182,6 +182,34 @@ initRenderer(SDL_Handles &handles, v2i vpDims) return true; } +bool +addTexture(SDL_Handles &handles, std::string path) +{ + // testing + LOG(INFO) << "Loading image: " << path << "\n"; + SDL_Surface* image = IMG_Load(path.c_str()); + + if (!image) + { + LOG(ERROR) << "IMG_Load: " << IMG_GetError() << "\n"; + return 1; + } + + GLuint tex_id; + glGenTextures(1, &tex_id); + glBindTexture(GL_TEXTURE_2D, tex_id); + glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, image->w, image->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, image->pixels); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + + // store opengl id in SDL_Surface.userdat + image->userdata = (void*)(intptr_t) tex_id; + handles.texSurfaces.push_back(image); + + return true; +} + // NOTE: mat_id should match the matrix variable name in the shader source bool initShaderProgram(gl_render_group &rg, const char * vertex_code, const char * frag_code, const char * mat_id)