Click here to Skip to main content
Rate this: bad
good
Please Sign up or sign in to vote.
See more: OpenGL
I've tried everything to get OpenGL 3.2 to render with CG shaders in my game engine but I have had no luck. So I decided to make a bare minimal project but still shaders won't work. In theory my test project should just render a red triangle but it is white because the shader is not doing anything.
 
I'll post the code here:
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <string>
#include <GL/glew.h>
#include <Cg/cg.h>
#include <Cg/cgGL.h>
#include <SDL2/SDL.h>

int main()
{
    SDL_Window *mainwindow;
    SDL_GLContext maincontext;
 
    SDL_Init(SDL_INIT_VIDEO);
 
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);
    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
    SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
 
    mainwindow = SDL_CreateWindow("Test", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 512, 512, SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN);
 
    maincontext = SDL_GL_CreateContext(mainwindow);
 
    glewExperimental = GL_TRUE;
    glewInit();
 
    _CGcontext* cgcontext;
    cgcontext = cgCreateContext();
    cgGLRegisterStates(cgcontext);
 
    CGerror error;
    CGeffect effect;
    const char* string;
    std::string shader;
 
    shader =
            "struct VS_INPUT"
            "{"
            "   float3 pos              : ATTR0;"
            "};"
 
            "struct FS_INPUT"
            "{"
            "   float4 pos                  : POSITION;"
            "   float2 tex                  : TEXCOORD0;"
            "};"
 
            "struct FS_OUTPUT"
            "{"
            "   float4 color                : COLOR;"
            "};"
 
            "FS_INPUT VS( VS_INPUT In )"
            "{"
            "   FS_INPUT Out;"
            "   Out.pos = float4( In.pos, 1.0f );"
            "   Out.tex = float2( 0.0f, 0.0f );"
            "   return Out;"
            "}"
 
            "FS_OUTPUT FS( FS_INPUT In )"
            "{"
            "   FS_OUTPUT Out;"
            "   Out.color = float4(1.0f, 0.0f, 0.0f, 1.0f);"
            "   return Out;"
            "}"
 
            "technique t0"
            "{"
            "   pass p0"
            "   {"
            "      VertexProgram = compile gp4vp VS();"
            "      FragmentProgram = compile gp4fp FS();"
            "   }"
            "}";
 
    effect = cgCreateEffect(cgcontext, shader.c_str(), NULL);
    error = cgGetError();
    if(error)
    {
        string = cgGetLastListing(cgcontext);
        fprintf(stderr, "Shader compiler: %s\n", string);
    }
 
    glClearColor ( 0.0, 0.0, 1.0, 1.0 );
    glClear ( GL_COLOR_BUFFER_BIT );
 
    float* vert = new float[9];
 
    vert[0] = 0.0; vert[1] = 0.5; vert[2] =-1.0;
    vert[3] =-1.0; vert[4] =-0.5; vert[5] =-1.0;
    vert[6] = 1.0; vert[7] =-0.5; vert[8]= -1.0;
 
    unsigned int m_vaoID;
    unsigned int m_vboID;
 
    glGenVertexArrays(1, &m_vaoID);
    glBindVertexArray(m_vaoID);
 
    glGenBuffers(1, &m_vboID);
 
    glBindBuffer(GL_ARRAY_BUFFER, m_vboID);
    glBufferData(GL_ARRAY_BUFFER, 9 * sizeof(GLfloat), vert, GL_STATIC_DRAW);
 
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
    glEnableVertexAttribArray(0);
 
    CGtechnique tech = cgGetFirstTechnique( effect );
    CGpass pass = cgGetFirstPass(tech);
    while (pass)
    {
        cgSetPassState(pass);
        glDrawArrays(GL_TRIANGLES, 0, 3);
        cgResetPassState(pass);
        pass = cgGetNextPass(pass);
    }
 
    glDisableVertexAttribArray( 0 );
 
    glBindVertexArray(0);
 
    delete[] vert;
 
    glBindBuffer(GL_ARRAY_BUFFER, 0);
    glDeleteBuffers(1, &m_vboID);
    glDeleteVertexArrays(1, &m_vaoID);
 
    SDL_GL_SwapWindow(mainwindow);
    SDL_Delay(2000);
 
    SDL_GL_DeleteContext(maincontext);
    SDL_DestroyWindow(mainwindow);
    SDL_Quit();
 
    return 0;
}
What am I doing wrong?
Posted 26-Dec-12 1:38am

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
0 OriginalGriff 489
1 ChintanShukla 295
2 Gihan Liyanage 250
3 Richard Deeming 250
4 RyanDev 250
0 Sergey Alexandrovich Kryukov 8,906
1 OriginalGriff 7,601
2 CPallini 2,603
3 Richard MacCutchan 2,121
4 Abhinav S 1,923


Advertise | Privacy | Mobile
Web02 | 2.8.140827.1 | Last Updated 26 Dec 2012
Copyright © CodeProject, 1999-2014
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100