コード例 #1
0
ファイル: ImGuiWrapper.cpp プロジェクト: cguebert/Panda
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();
}
コード例 #2
0
ファイル: ImGuiRenderer.cpp プロジェクト: NCCA/FBODemos
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;
}
コード例 #3
0
ファイル: ImGuiRenderer.cpp プロジェクト: NCCA/ImGUIDemos
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;
}
コード例 #4
0
ファイル: HUD.cpp プロジェクト: havess/Asuna
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;
}