• Advertisement

nonsenseinc

Member
  • Content count

    4
  • Joined

  • Last visited

Community Reputation

102 Neutral

About nonsenseinc

  • Rank
    Newbie
  1. Greetings, after reading several OpenGL documentations I understand that glVertexAttribPointer takes a numeral value between 1 and 4 for its second parameter (size) as information how many vertices are taken into consideration to render a single triangle. But I do not understand how to use other then three vertices for a triangle. Also trying different values and seeing the result doesn't help me. What exactly does this do and what is it used for? Cheers, Jan
  2. Why is that? Running it with "3" (as the tutorial does) does actually work, but renders only one triangle (the first three vertices). I do aim to render six vertices making up two triangles forming a square. //Edit: having VertexAttribPointer at 3 and DrawArrays at 6 seems to work and makes sense now. I did not see the functions context and that it does not refer to the vertex count of the entire buffer but to the format thereof.
  3. I also use glew on Visual Studio and compile for x86 and x64. I ran into the same problem and I fixed it by adding GLEW_STATIC to the preprocessor variables (you can also add a #define) and put the includes in my project folder and added the glew.c to my project. In a way I am not using it as a library but include it directly in my code. I would gladly provide a project template as I see many people run into this problem, but I have a different error that currently blocks my project. If you want I can upload it later...
  4. Greetings, I am trying to learn OpenGL with the tutorials at opengl-tutorial.org and started modifying tutorial two that basically draws a simple triangle. In addiction to changing some of the utility code that seems to work for me I tried to add another triangle to draw a square that I would want to texture later. Now I ran into my first problem that I cannot identify. I am getting an access violation at position 0 at glDisableVertexAttribArray. My Code:[CODE]#include <GL/glew.h> #include <GL/glfw.h> #include <glm/glm.hpp> #include <string> #include <fstream> #include <streambuf> #include <iostream> using namespace glm; using namespace std; GLuint loadShaders(const string vertexShaderPath, const string fragmentShaderPath) { GLuint vertexShaderID = glCreateShader(GL_VERTEX_SHADER); GLuint fragmentShaderID = glCreateShader(GL_FRAGMENT_SHADER); string vertexShaderCode; ifstream vertexShaderStream(vertexShaderPath); vertexShaderStream.seekg(0, ios::end); vertexShaderCode.reserve(vertexShaderStream.tellg()); vertexShaderStream.seekg(0, ios::beg); vertexShaderCode.assign((istreambuf_iterator<char>(vertexShaderStream)), istreambuf_iterator<char>()); string fragmentShaderCode; ifstream fragmentShaderStream(fragmentShaderPath); fragmentShaderStream.seekg(0, ios::end); fragmentShaderCode.reserve(fragmentShaderStream.tellg()); fragmentShaderStream.seekg(0, ios::beg); fragmentShaderCode.assign((istreambuf_iterator<char>(fragmentShaderStream)), istreambuf_iterator<char>()); const char *vertexShaderSource = vertexShaderCode.c_str(); glShaderSource(vertexShaderID, 1, &vertexShaderSource, NULL); glCompileShader(vertexShaderID); const char *fragmentShaderSource = fragmentShaderCode.c_str(); glShaderSource(fragmentShaderID, 1, &fragmentShaderSource, NULL); glCompileShader(fragmentShaderID); GLuint programID = glCreateProgram(); glAttachShader(programID, vertexShaderID); glAttachShader(programID, fragmentShaderID); glLinkProgram(programID); glDeleteShader(vertexShaderID); glDeleteShader(fragmentShaderID); return programID; } int main(int argc, char* argv[]) { glfwInit(); glfwOpenWindowHint(GLFW_FSAA_SAMPLES, 4); glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3); glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 3); glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); glfwOpenWindow(1024, 768, 0, 0, 0, 0, 32, 0, GLFW_WINDOW); glfwSetWindowTitle("RTS"); glfwEnable(GLFW_STICKY_KEYS); glewExperimental = GL_TRUE; glewInit(); glClearColor(0.0f, 1.0f, 0.0f, 0.0f); GLuint VertexArrayID; glGenVertexArrays(1, &VertexArrayID); glBindVertexArray(VertexArrayID); GLuint programID = loadShaders("VertexShader.glsl", "FragmentShader.glsl"); const GLfloat vertexBufferData[] = { -1.0f, -1.0f, 0.0f, -1.0f, 1.0f, 0.0f, 1.0f, -1.0f, 0.0f, 1.0f, -1.0f, 0.0f, 1.0f, 1.0f, 0.0f, -1.0f, 1.0f, 0.0f }; GLuint vertexBuffer; glGenBuffers(1, &vertexBuffer); glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer); glBufferData(GL_ARRAY_BUFFER, sizeof(vertexBufferData), vertexBufferData, GL_STATIC_DRAW); do { glClear(GL_COLOR_BUFFER_BIT); glUseProgram(programID); glEnableVertexAttribArray(0); glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer); glVertexAttribPointer(0, 6, GL_FLOAT, GL_FALSE, 0, (void*)0); glDrawArrays(GL_TRIANGLES, 0, 6); glDisableVertexAttribArray(0); glfwSwapBuffers(); } while(glfwGetKey(GLFW_KEY_ESC) != GLFW_PRESS && glfwGetWindowParam(GLFW_OPENED)); glDeleteBuffers(1, &vertexBuffer); glDeleteProgram(programID); glDeleteVertexArrays(1, &VertexArrayID); glfwTerminate(); return 0; }[/CODE](original on [url="http://www.opengl-tutorial.org/beginners-tutorials/tutorial-2-the-first-triangle/"]http://www.opengl-tu...first-triangle/[/url]) The shader code is the same as the original, it compiles fine and the original code does run perfectly. Please help me fix my code, thank you! Cheers, Jan
  • Advertisement