bool ImGuiDX9::CreateDeviceObjects() { if (!D3DDevice) return false; if (!CreateFontsTexture()) return false; return true; }
bool CreateDeviceObjects() { 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" "out vec4 Frag_Pos;\n" "void main()\n" "{\n" " Frag_UV = UV;\n" " Frag_Color = Color;\n" " gl_Position = ProjMtx * vec4(Position.xy,0,1);\n" " Frag_Pos = gl_Position;\n" "}\n"; const GLchar *fragment_shader = "#version 330\n" "uniform sampler2D Texture;\n" "in vec2 Frag_UV;\n" "in vec4 Frag_Color;\n" "in vec4 Frag_Pos;\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); 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 glBindVertexArray(0); glBindBuffer(GL_ARRAY_BUFFER, 0); CreateFontsTexture(); glDeleteShader(g_VertHandle); glDeleteShader(g_FragHandle); return true; }
ImGuiInterface::ImGuiInterface(RenderSystem* rs, InputManager* im) : mInputMgr(im), mIO(ImGui::GetIO()), mRenderSystem(rs->GetOgreRenderSystem()), mWidth(rs->GetWidth()), mHeight(rs->GetHeight()) { assert(gCurrentImGuiInterface == nullptr); gCurrentImGuiInterface = this; mIO.DisplaySize.x = (float)mWidth; mIO.DisplaySize.y = (float)mHeight; mIO.RenderDrawListsFn = ImGuiInterface::RenderDrawListsCallback; // Set up font mIO.Fonts->AddFontDefault(); CreateFontsTexture(); // Set up key bindings mIO.KeyMap[ImGuiKey_Tab] = SDLK_TAB; mIO.KeyMap[ImGuiKey_LeftArrow] = SDLK_LEFT; mIO.KeyMap[ImGuiKey_RightArrow] = SDLK_RIGHT; mIO.KeyMap[ImGuiKey_UpArrow] = SDLK_UP; mIO.KeyMap[ImGuiKey_DownArrow] = SDLK_DOWN; mIO.KeyMap[ImGuiKey_Home] = SDLK_HOME; mIO.KeyMap[ImGuiKey_End] = SDLK_END; mIO.KeyMap[ImGuiKey_Delete] = SDLK_DELETE; mIO.KeyMap[ImGuiKey_Backspace] = SDLK_BACKSPACE; mIO.KeyMap[ImGuiKey_Enter] = SDLK_RETURN; mIO.KeyMap[ImGuiKey_Escape] = SDLK_ESCAPE; mIO.KeyMap[ImGuiKey_A] = SDLK_a; mIO.KeyMap[ImGuiKey_C] = SDLK_c; mIO.KeyMap[ImGuiKey_V] = SDLK_v; mIO.KeyMap[ImGuiKey_X] = SDLK_x; mIO.KeyMap[ImGuiKey_Y] = SDLK_y; mIO.KeyMap[ImGuiKey_Z] = SDLK_z; // Set up vertex data mRenderOp.vertexData = new Ogre::VertexData(); mRenderOp.operationType = Ogre::RenderOperation::OT_TRIANGLE_LIST; mRenderOp.useIndexes = false; // Set up vertex declaration Ogre::VertexDeclaration* vd = mRenderOp.vertexData->vertexDeclaration; size_t offset = 0; vd->addElement(0, offset, Ogre::VET_FLOAT2, Ogre::VES_POSITION); offset += Ogre::VertexElement::getTypeSize(Ogre::VET_FLOAT2); vd->addElement(0, offset, Ogre::VET_FLOAT2, Ogre::VES_TEXTURE_COORDINATES); offset += Ogre::VertexElement::getTypeSize(Ogre::VET_FLOAT2); vd->addElement(0, offset, Ogre::VET_COLOUR, Ogre::VES_DIFFUSE); // Create initial vertex buffer mSize = 1000; AllocateVertexBuffer(mSize); // Configure the alpha blending mode mAlphaBlendMode.blendType = Ogre::LBT_ALPHA; mAlphaBlendMode.source1 = Ogre::LBS_DIFFUSE; mAlphaBlendMode.source2 = Ogre::LBS_TEXTURE; mAlphaBlendMode.operation = Ogre::LBX_MODULATE; }
bool CGUIManager::CreateDeviceObjects() { Window->MakeContextCurrent(); // 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"; ShaderHandle = glCreateProgram(); VertHandle = glCreateShader(GL_VERTEX_SHADER); FragHandle = glCreateShader(GL_FRAGMENT_SHADER); glShaderSource(VertHandle, 1, &vertex_shader, 0); glShaderSource(FragHandle, 1, &fragment_shader, 0); glCompileShader(VertHandle); glCompileShader(FragHandle); glAttachShader(ShaderHandle, VertHandle); glAttachShader(ShaderHandle, FragHandle); glLinkProgram(ShaderHandle); AttribLocationTex = glGetUniformLocation(ShaderHandle, "Texture"); AttribLocationProjMtx = glGetUniformLocation(ShaderHandle, "ProjMtx"); AttribLocationPosition = glGetAttribLocation(ShaderHandle, "Position"); AttribLocationUV = glGetAttribLocation(ShaderHandle, "UV"); AttribLocationColor = glGetAttribLocation(ShaderHandle, "Color"); glGenBuffers(1, &VboHandle); glGenBuffers(1, &ElementsHandle); glGenVertexArrays(1, &VaoHandle); glBindVertexArray(VaoHandle); glBindBuffer(GL_ARRAY_BUFFER, VboHandle); glEnableVertexAttribArray(AttribLocationPosition); glEnableVertexAttribArray(AttribLocationUV); glEnableVertexAttribArray(AttribLocationColor); #define OFFSETOF(TYPE, ELEMENT) ((size_t)&(((TYPE *)0)->ELEMENT)) glVertexAttribPointer(AttribLocationPosition, 2, GL_FLOAT, GL_FALSE, sizeof(ImDrawVert), (GLvoid*) OFFSETOF(ImDrawVert, pos)); glVertexAttribPointer(AttribLocationUV, 2, GL_FLOAT, GL_FALSE, sizeof(ImDrawVert), (GLvoid*) OFFSETOF(ImDrawVert, uv)); glVertexAttribPointer(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; }