Почему GlgetUniformlocation не удается меня?

Я нашел Гвен несколько дней назад и думал, что это выглядело как идеальный инструментарий GUI для моего проекта. Но о, дорогой, посмотрите на все, что код OpenGL 2 в рендерере. Поэтому я подумал, что я напишу opengl 3 Renderer, чтобы на самом деле я могу использовать его, но я гораздо более знаком с CG, чем GLSL, и я застрял, надпись образца. Я думаю, что если я могу просто получить эти единые переменные набор, он должен быть в основном сделан.

Шестики компилируют и ссылаются без проблем. Я сузил его к Glgetuniformlocation возвращается -1 для орфографической матрицы и сэмплера текстуры, но я не знаю, почему именно это делает. Типичная проблема, кажется, что если вы на самом деле не используете их, они оптимизированы, но я использовал их обоих.

Если у кого-нибудь есть идеи, я все уши. Будет более чем рад разместить / ссылку на полную вещь, как только это работает должным образом. Это мой первый удар в GLSL, поэтому я мог легко делать что-то глупое. Я только что закончил создать CG для другого проекта, поэтому я не совсем Неужели .

Shader init Code вызывается после настройки контекста OpenGL:

void InitializeShaders(void)
{
    g_ShaderProgram = glCreateProgram();
    g_VertexShader = glCreateShader(GL_VERTEX_SHADER);
    g_FragmentShader = glCreateShader(GL_FRAGMENT_SHADER);

    glShaderSource(g_VertexShader, 1, (const GLchar **)&VertexShaderData, 0);
    glShaderSource(g_FragmentShader, 1, (const GLchar **)&FragmentShaderData, 0);

    glCompileShader(g_VertexShader);
    CheckShaderCompile(g_VertexShader);

    glCompileShader(g_FragmentShader);
    CheckShaderCompile(g_FragmentShader);

    glAttachShader(g_ShaderProgram, g_VertexShader);
    glAttachShader(g_ShaderProgram, g_FragmentShader);

    glBindAttribLocation(g_ShaderProgram, 0, "position");
    glBindAttribLocation(g_ShaderProgram, 1, "color");
    glBindAttribLocation(g_ShaderProgram, 2, "texCoord");

    glBindFragDataLocation(g_ShaderProgram, 0, "color");

    glLinkProgram(g_ShaderProgram);
    CheckShaderLink();

    g_OrthoTransformLocation = glGetUniformLocation(g_ShaderProgram, "orthoTransform");
    g_TextureLocation = glGetUniformLocation(g_ShaderProgram, "textureSampler");
}

Шедали хранятся в виде строки в заголовом файле, но я убрал все новички и обратные язвы, чтобы они не были настолько болезненными, чтобы посмотреть.

Вершина шейдера:

#version 330

in vec4 position;
out vec4 outPosition;
uniform mat4x4 orthoTransform;
void main(void)
{
    outPosition = position * orthoTransform;
}

Фрагментный шейдер:

#version 330

in vec2 texCoord;
in vec4 color;
out vec4 outColor;
uniform sampler2D textureSampler;
void main(void)
{
    //outColor = texture(textureSampler, texCoord) * color;
    outColor = vec4(1.0f, 0.0f, 0.0f, 1.0f);
}
10
задан Apostate 7 September 2011 в 20:29
поделиться