void ImGui_Wrapper::initGui() { createFontsTexture(); const GLchar *vertex_shader = "#version 330\n" "uniform mat4 ProjMtx;\n" "layout (location = 0) in vec2 Position;\n" "layout (location = 1) in vec2 UV;\n" "layout (location = 2) in vec4 Color;\n" "out vec2 Frag_UV;\n" "out vec4 Frag_Color;\n" "void main()\n" "{\n" " Frag_UV = UV;\n" " Frag_Color = Color;\n" " gl_Position = ProjMtx * vec4(Position.xy,0,1);\n" "}\n"; const GLchar* fragment_shader = "#version 330\n" "uniform sampler2D Texture;\n" "in vec2 Frag_UV;\n" "in vec4 Frag_Color;\n" "out vec4 Out_Color;\n" "void main()\n" "{\n" " Out_Color = Frag_Color * texture( Texture, Frag_UV.st);\n" "}\n"; m_shader.addShaderFromMemory(graphics::ShaderType::Vertex, vertex_shader); m_shader.addShaderFromMemory(graphics::ShaderType::Fragment, fragment_shader); m_shader.link(); m_locationTex = m_shader.uniformLocation("Texture"); m_locationProjMtx = m_shader.uniformLocation("ProjMtx"); m_VAO.create(); m_VAO.bind(); m_VBO.create(graphics::BufferType::ArrayBuffer, graphics::BufferUsage::StreamDraw); m_VBO.bind(); glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(ImDrawVert), (GLvoid*)offsetof(ImDrawVert, pos)); glEnableVertexAttribArray(0); glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(ImDrawVert), (GLvoid*)offsetof(ImDrawVert, uv)); glEnableVertexAttribArray(1); glVertexAttribPointer(2, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(ImDrawVert), (GLvoid*)offsetof(ImDrawVert, col)); glEnableVertexAttribArray(2); m_EBO.create(graphics::BufferType::ElementArrayBuffer, graphics::BufferUsage::StreamDraw); m_EBO.bind(); m_VAO.release(); m_lastTime = high_resolution_clock::now(); }
bool ImGuiRenderer::createDeviceObjects() { // Backup GL state GLint last_texture, last_array_buffer, last_vertex_array; glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture); glGetIntegerv(GL_ARRAY_BUFFER_BINDING, &last_array_buffer); glGetIntegerv(GL_VERTEX_ARRAY_BINDING, &last_vertex_array); ngl::ShaderLib *shader=ngl::ShaderLib::instance(); shader->loadShader(ImGUIShader,"shaders/imguiVertex.glsl","shaders/imguiFragment.glsl"); createFontsTexture(); // Restore modified GL state glBindTexture(GL_TEXTURE_2D, last_texture); glBindBuffer(GL_ARRAY_BUFFER, last_array_buffer); glBindVertexArray(last_vertex_array); return true; }
bool ImGuiRenderer::createDeviceObjects() { // Backup GL state GLint last_texture, last_array_buffer, last_vertex_array; glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture); glGetIntegerv(GL_ARRAY_BUFFER_BINDING, &last_array_buffer); glGetIntegerv(GL_VERTEX_ARRAY_BINDING, &last_vertex_array); const GLchar *vertex_shader = "#version 330\n" "uniform mat4 ProjMtx;\n" "in vec2 Position;\n" "in vec2 UV;\n" "in vec4 Color;\n" "out vec2 Frag_UV;\n" "out vec4 Frag_Color;\n" "void main()\n" "{\n" " Frag_UV = UV;\n" " Frag_Color = Color;\n" " gl_Position = ProjMtx * vec4(Position.xy,0,1);\n" "}\n"; const GLchar* fragment_shader = "#version 330\n" "uniform sampler2D Texture;\n" "in vec2 Frag_UV;\n" "in vec4 Frag_Color;\n" "out vec4 Out_Color;\n" "void main()\n" "{\n" " Out_Color = Frag_Color * texture( Texture, Frag_UV.st);\n" "}\n"; g_ShaderHandle = glCreateProgram(); g_VertHandle = glCreateShader(GL_VERTEX_SHADER); g_FragHandle = glCreateShader(GL_FRAGMENT_SHADER); glShaderSource(g_VertHandle, 1, &vertex_shader, 0); glShaderSource(g_FragHandle, 1, &fragment_shader, 0); glCompileShader(g_VertHandle); glCompileShader(g_FragHandle); glAttachShader(g_ShaderHandle, g_VertHandle); glAttachShader(g_ShaderHandle, g_FragHandle); glLinkProgram(g_ShaderHandle); g_AttribLocationTex = glGetUniformLocation(g_ShaderHandle, "Texture"); g_AttribLocationProjMtx = glGetUniformLocation(g_ShaderHandle, "ProjMtx"); g_AttribLocationPosition = glGetAttribLocation(g_ShaderHandle, "Position"); g_AttribLocationUV = glGetAttribLocation(g_ShaderHandle, "UV"); g_AttribLocationColor = glGetAttribLocation(g_ShaderHandle, "Color"); glGenBuffers(1, &g_VboHandle); glGenBuffers(1, &g_ElementsHandle); glGenVertexArrays(1, &g_VaoHandle); glBindVertexArray(g_VaoHandle); glBindBuffer(GL_ARRAY_BUFFER, g_VboHandle); glEnableVertexAttribArray(g_AttribLocationPosition); glEnableVertexAttribArray(g_AttribLocationUV); glEnableVertexAttribArray(g_AttribLocationColor); #define OFFSETOF(TYPE, ELEMENT) ((size_t)&(((TYPE *)0)->ELEMENT)) glVertexAttribPointer(g_AttribLocationPosition, 2, GL_FLOAT, GL_FALSE, sizeof(ImDrawVert), (GLvoid*)OFFSETOF(ImDrawVert, pos)); glVertexAttribPointer(g_AttribLocationUV, 2, GL_FLOAT, GL_FALSE, sizeof(ImDrawVert), (GLvoid*)OFFSETOF(ImDrawVert, uv)); glVertexAttribPointer(g_AttribLocationColor, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(ImDrawVert), (GLvoid*)OFFSETOF(ImDrawVert, col)); #undef OFFSETOF createFontsTexture(); // Restore modified GL state glBindTexture(GL_TEXTURE_2D, last_texture); glBindBuffer(GL_ARRAY_BUFFER, last_array_buffer); glBindVertexArray(last_vertex_array); return true; }
bool HUD::createDevices() { // Build texture atlas ImGuiIO& io = ImGui::GetIO(); // Backup GL state GLint last_texture, last_array_buffer, last_vertex_array; glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture); glGetIntegerv(GL_ARRAY_BUFFER_BINDING, &last_array_buffer); glGetIntegerv(GL_VERTEX_ARRAY_BINDING, &last_vertex_array); CheckOpenGLError("Get state", 313); g_shaderHandle = glCreateProgram(); g_vertHandle = glCreateShader(GL_VERTEX_SHADER); g_fragHandle = glCreateShader(GL_FRAGMENT_SHADER); //glShaderSource(g_vertHandle, 1, &vertex_shader, 0); //lShaderSource(g_fragHandle, 1, &fragment_shader, 0); glCompileShader(g_vertHandle); glCompileShader(g_fragHandle); CheckOpenGLError("Shader compile", 348); glAttachShader(g_shaderHandle, g_vertHandle); glAttachShader(g_shaderHandle, g_fragHandle); glLinkProgram(g_shaderHandle); GLint status; glGetProgramiv(g_shaderHandle, GL_LINK_STATUS, &status); if( status == GL_FALSE) printf("Program did not link\n"); CheckOpenGLError("Program link", 352); g_attribLocationTex = glGetUniformLocation(g_shaderHandle, "Texture"); g_attribLocationProjMtx = glGetUniformLocation(g_shaderHandle, "ProjMtx"); g_attribLocationPosition = glGetAttribLocation(g_shaderHandle, "Position"); g_attribLocationUV = glGetAttribLocation(g_shaderHandle, "UV"); g_attribLocationColor = glGetAttribLocation(g_shaderHandle, "Color"); CheckOpenGLError("Unis and attribs", 359); glGenBuffers(1, &g_vboHandle); glGenBuffers(1, &g_elementsHandle); glGenVertexArraysAPPLE(1, &g_vaoHandle); glBindVertexArrayAPPLE(g_vaoHandle); CheckOpenGLError("Bind VAO", 343); glBindBuffer(GL_ARRAY_BUFFER, g_vboHandle); glEnableVertexAttribArray(g_attribLocationPosition); glEnableVertexAttribArray(g_attribLocationUV); glEnableVertexAttribArray(g_attribLocationColor); CheckOpenGLError("Enable Attrib Arrays", 343); #define OFFSETOF(TYPE, ELEMENT) ((size_t)&(((TYPE *)0)->ELEMENT)) glVertexAttribPointer(g_attribLocationPosition, 2, GL_FLOAT, GL_FALSE, sizeof(ImDrawVert), (GLvoid*)OFFSETOF(ImDrawVert, pos)); glVertexAttribPointer(g_attribLocationUV, 2, GL_FLOAT, GL_FALSE, sizeof(ImDrawVert), (GLvoid*)OFFSETOF(ImDrawVert, uv)); glVertexAttribPointer(g_attribLocationColor, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(ImDrawVert), (GLvoid*)OFFSETOF(ImDrawVert, col)); CheckOpenGLError("Attrib pointer", 377); #undef OFFSETOF createFontsTexture(); // Restore modified GL state glBindTexture(GL_TEXTURE_2D, last_texture); glBindBuffer(GL_ARRAY_BUFFER, last_array_buffer); glBindVertexArrayAPPLE(last_vertex_array); return true; }