bool ImGuiDX9::CreateDeviceObjects()
		{
			if (!D3DDevice)
				return false;

			if (!CreateFontsTexture())
				return false;

			return true;
		}
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
0
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;
}
Exemplo n.º 4
0
	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;
	}