Thread: Can I post help w/ OpenGL set up in VS in this forum category?

  1. #1
    Registered User
    Join Date
    Jul 2012
    Posts
    87

    Can I post help w/ OpenGL set up in VS in this forum category?

    I basically want to set up the following in order to learn the OpenGL tutorials.

    I'm using: Windows 7 64-bit
    IDE: Visual Studio C++ 2010 Express
    Using Windows SDK v7.0A

    I would like to install:
    GLEW, GLFW, FreeGLUT, GLLoad, GLM
    I added the dependecies in linker in VSC++ and copied each .h, .lib, .dll to their respective folders: so System32, Windows SDK\v7.0A\Include, Windows SDK\v7.0A\Lib, System32 dir.

    DO I have to include the above also in the SySWoW64 dir too?

    When I commented out #include <gl/glew.h> I get this message when compiling:
    1>------ Build started: Project: playground, Configuration: Debug Win32 ------
    1> main.cpp
    1>c:\users\documents\visual studio 2010\projects\playground\playground\main.cpp(171): error C2220: warning treated as error - no 'object' file generated
    1>c:\users\documents\visual studio 2010\projects\playground\playground\main.cpp(171): warning C4100: 'y' : unreferenced formal parameter
    1>c:\users\documents\visual studio 2010\projects\playground\playground\main.cpp(171): warning C4100: 'x' : unreferenced formal parameter
    1>c:\users\documents\visual studio 2010\projects\playground\playground\main.cpp(182): warning C4100: 'height' : unreferenced formal parameter
    1>c:\users\documents\visual studio 2010\projects\playground\playground\main.cpp(182): warning C4100: 'width' : unreferenced formal parameter
    1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gl\freeglut_std.h(612): warning C4505: 'glutInit_ATEXIT_HACK' : unreferenced local function has been removed
    1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gl\freeglut_std.h(614): warning C4505: 'glutCreateWindow_ATEXIT_HACK' : unreferenced local function has been removed
    1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gl\freeglut_std.h(616): warning C4505: 'glutCreateMenu_ATEXIT_HACK' : unreferenced local function has been removed
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========


    BUT if I leave in #include <gl/glew.h> I get this message when compiling:
    1>------ Build started: Project: playground, Configuration: Debug Win32 ------
    1> main.cpp
    1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gl\glew.h(84): fatal error C1189: #error : gl.h included before glew.h
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

    This is the code for the tutorial I am learning from. Learning w/o practice is useless...
    Code:
    //Copyright (C) 2010-2012 by Jason L. McKesson
    //This file is licensed under the MIT License.
    
    #include <algorithm>
    #include <string>
    #include <vector>
    #include <stdio.h>
    #include <cstdlib>
    #include <glload/gl_3_2_comp.h>
    //#include <gl/glew.h> //Q: Why can't I include this header?
    #include <GL/freeglut.h>
    
    
    GLuint CreateShader(GLenum eShaderType, const std::string &strShaderFile)
    {
        GLuint shader = glCreateShader(eShaderType);
        const char *strFileData = strShaderFile.c_str();
        glShaderSource(shader, 1, &strFileData, NULL);
    
        glCompileShader(shader);
    
        GLint status;
        glGetShaderiv(shader, GL_COMPILE_STATUS, &status);
        if (status == GL_FALSE)
        {
            GLint infoLogLength;
            glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &infoLogLength);
    
            GLchar *strInfoLog = new GLchar[infoLogLength + 1];
            glGetShaderInfoLog(shader, infoLogLength, NULL, strInfoLog);
    
            const char *strShaderType = NULL;
            switch(eShaderType)
            {
            case GL_VERTEX_SHADER: strShaderType = "vertex"; break;
            case GL_GEOMETRY_SHADER: strShaderType = "geometry"; break;
            case GL_FRAGMENT_SHADER: strShaderType = "fragment"; break;
            }
    
            fprintf(stderr, "Compile failure in %s shader:\n%s\n", strShaderType, strInfoLog);
            delete[] strInfoLog;
        }
    
        return shader;
    }
    
    GLuint CreateProgram(const std::vector<GLuint> &shaderList)
    {
        GLuint program = glCreateProgram();
    
        for(size_t iLoop = 0; iLoop < shaderList.size(); iLoop++)
            glAttachShader(program, shaderList[iLoop]);
    
        glLinkProgram(program);
    
        GLint status;
        glGetProgramiv (program, GL_LINK_STATUS, &status);
        if (status == GL_FALSE)
        {
            GLint infoLogLength;
            glGetProgramiv(program, GL_INFO_LOG_LENGTH, &infoLogLength);
    
            GLchar *strInfoLog = new GLchar[infoLogLength + 1];
            glGetProgramInfoLog(program, infoLogLength, NULL, strInfoLog);
            fprintf(stderr, "Linker failure: %s\n", strInfoLog);
            delete[] strInfoLog;
        }
    
        for(size_t iLoop = 0; iLoop < shaderList.size(); iLoop++)
            glDetachShader(program, shaderList[iLoop]);
    
        return program;
    }
    
    GLuint theProgram;
    
    const std::string strVertexShader(
        "#version 330\n"
        "layout(location = 0) in vec4 position;\n"
        "void main()\n"
        "{\n"
        "   gl_Position = position;\n"
        "}\n"
    );
    
    const std::string strFragmentShader(
        "#version 330\n"
        "out vec4 outputColor;\n"
        "void main()\n"
        "{\n"
        "   outputColor = vec4(1.0f, 1.0f, 1.0f, 1.0f);\n"
        "}\n"
    );
    
    void InitializeProgram()
    {
        std::vector<GLuint> shaderList;
    
        shaderList.push_back(CreateShader(GL_VERTEX_SHADER, strVertexShader));
        shaderList.push_back(CreateShader(GL_FRAGMENT_SHADER, strFragmentShader));
    
        theProgram = CreateProgram(shaderList);
    
        std::for_each(shaderList.begin(), shaderList.end(), glDeleteShader);
    }
    
    const float vertexPositions[] = {
        0.75f, 0.75f, 0.0f, 1.0f,
        0.75f, -0.75f, 0.0f, 1.0f,
        -0.75f, -0.75f, 0.0f, 1.0f,
    };
    
    GLuint positionBufferObject;
    GLuint vao;
    
    
    void InitializeVertexBuffer()
    {
        glGenBuffers(1, &positionBufferObject);
    
        glBindBuffer(GL_ARRAY_BUFFER, positionBufferObject);
        glBufferData(GL_ARRAY_BUFFER, sizeof(vertexPositions), vertexPositions, GL_STATIC_DRAW);
        glBindBuffer(GL_ARRAY_BUFFER, 0);
    }
    
    //Called after the window and OpenGL are initialized. Called exactly once, before the main loop.
    void init()
    {
        InitializeProgram();
        InitializeVertexBuffer();
    
        glGenVertexArrays(1, &vao);
        glBindVertexArray(vao);
    }
    
    //Called to update the display.
    //You should call glutSwapBuffers after all of your rendering to display what you rendered.
    //If you need continuous updates of the screen, call glutPostRedisplay() at the end of the function.
    void display()
    {
        glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
        glClear(GL_COLOR_BUFFER_BIT);
    
        glUseProgram(theProgram);
    
        glBindBuffer(GL_ARRAY_BUFFER, positionBufferObject);
        glEnableVertexAttribArray(0);
        glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0);
    
        glDrawArrays(GL_TRIANGLES, 0, 3);
    
        glDisableVertexAttribArray(0);
        glUseProgram(0);
    
        glutSwapBuffers();
    }
    
    //Called whenever the window is resized. The new window size is given, in pixels.
    //This is an opportunity to call glViewport or glScissor to keep up with the change in size.
    void reshape (int w, int h)
    {
        glViewport(0, 0, (GLsizei) w, (GLsizei) h);
    }
    
    //Called whenever a key on the keyboard was pressed.
    //The key is given by the ''key'' parameter, which is in ASCII.
    //It's often a good idea to have the escape key (ASCII value 27) call glutLeaveMainLoop() to 
    //exit the program.
    void keyboard(unsigned char key, int x, int y)
    {
        switch (key)
        {
          case 27:
              glutLeaveMainLoop();
              return;
        }
    }
    
    
    unsigned int defaults(unsigned int displayMode, int &width, int &height) {return displayMode;}
    The author's tutorial: Building the Tutorials

    The Game Programmiing forums area doesn't seem to get a lot of responses... I'd appreciate it if anyone is familar w/ OpenGL and to help me get it going...

  2. #2
    Registered User
    Join Date
    May 2009
    Posts
    4,183
    Quote Originally Posted by monkey_c_monkey View Post

    BUT if I leave in #include <gl/glew.h> I get this message when compiling:
    1>------ Build started: Project: playground, Configuration: Debug Win32 ------
    1> main.cpp
    1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gl\glew.h(84): fatal error C1189: #error : gl.h included before glew.h
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

    This is the code for the tutorial I am learning from. Learning w/o practice is useless...
    Code:
    //Copyright (C) 2010-2012 by Jason L. McKesson
    //This file is licensed under the MIT License.
    
    #include <algorithm>
    #include <string>
    #include <vector>
    #include <stdio.h>
    #include <cstdlib>
    #include <glload/gl_3_2_comp.h>
    //#include <gl/glew.h> //Q: Why can't I include this header?
    #include <GL/freeglut.h>
    The author's tutorial: Building the Tutorials

    The Game Programmiing forums area doesn't seem to get a lot of responses... I'd appreciate it if anyone is familar w/ OpenGL and to help me get it going...
    I am NOT familiar w/ OpenGL.

    But, I suggest trying to include the header earlier.

    Code:
    #include <algorithm>
    #include <string>
    #include <vector>
    #include <cstdio> /* better to not include stdio.h in C++ projects; use cstdio instead */
    #include <cstdlib>
    
    #include <gl/glew.h> /* make sure this is after the standard includes; but before and other Graphic includes */
    
    #include <glload/gl_3_2_comp.h> /* this header likely was including gl.h */
    
    #include <GL/freeglut.h> /* Note no idea if this header might cause problem; */

    Tim S.
    "...a computer is a stupid machine with the ability to do incredibly smart things, while computer programmers are smart people with the ability to do incredibly stupid things. They are,in short, a perfect match.." Bill Bryson

  3. #3
    [](){}(); manasij7479's Avatar
    Join Date
    Feb 2011
    Location
    *nullptr
    Posts
    2,657
    Did you actually read the "Building the Tutorials" page?

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Hello - First post on this forum
    By EssiJoon in forum C Programming
    Replies: 7
    Last Post: 04-19-2012, 12:46 PM
  2. get keyword and category of a page
    By Checker1977 in forum Tech Board
    Replies: 11
    Last Post: 12-27-2008, 07:23 AM
  3. category of Math signs???
    By Vorkosigan in forum C++ Programming
    Replies: 2
    Last Post: 01-22-2004, 05:00 PM