Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

02.07.2014, 23:08

OpenGL Code für farbiges Dreieck

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#define GLEW_NO_GLU
#define GLFW_NO_GLU
#include <GL/glew.h>
#include <GLFW/glfw3.h>

int main()
{
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR,3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR,3);
glfwWindowHint(GLFW_OPENGL_PROFILE,GLFW_OPENGL_COMPAT_PROFILE);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT,GL_TRUE);

GLFWwindow* window = glfwCreateWindow(800, 600, "My Game", NULL, NULL);
glfwMakeContextCurrent(window);
glewExperimental = true;

glewInit();

GLchar* vertexshadersrc="#version 330\n"
"in vec4 position;"
"void main()"
"{"
"gl_Position=position;"
"}";
GLchar* fragmentshadersrc="#version 330\n"
"out vec 4 color;"
"void main()"
"{"
"color=vec4(1.0,0.0,0.0,1.0)"
"}";

GLuint vertexshader=glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertexshader,1,(const GLchar**)&vertexshadersrc,0);
glCompileShader(vertexshader);

GLuint fragmentshader=glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragmentshader,1,(const GLchar**)&fragmentshadersrc,0);
glCompileShader(fragmentshader);

GLuint programm=glCreateProgram();
glAttachShader(programm,vertexshader);
glAttachShader(programm,fragmentshader);
glLinkProgram(programm);
glDeleteShader(vertexshader);
glDeleteShader(fragmentshader);

GLfloat vertex[]=
{
-0.7f,-0.5f,0.0f,
0.7f,-0.5f,0.0f,
0.0f,0.5f,0.0f,
};

GLuint vertexbuffer;
glGenBuffers(1,&vertexbuffer);
glBindBuffer(GL_ARRAY_BUFFER,vertexbuffer);
glBufferData(GL_ARRAY_BUFFER,sizeof(vertex),vertex,GL_STATIC_DRAW);

GLuint position=glGetAttribLocation(programm,"position");
glVertexAttribPointer(position,3,GL_FLOAT,GL_FALSE,sizeof(GLfloat)*3,(void*)0);
glUseProgram(programm);
glEnableVertexAttribArray(position);



while (!glfwWindowShouldClose(window))
{
glClear(GL_COLOR_BUFFER_BIT);
glDrawArrays(GL_TRIANGLES,0,3);
glfwSwapBuffers(window);
glfwPollEvents();
}
}

Hier hab ich einen Quellcode aus einem Tutorial für Opengl. Dieser soll ein rotes dreieck in meinem Fenster erzeugen. Bei mir wird aber nichts gezeichnet. ?( Woran könnte das liegen. Ich wäre über mehrere hilfreiche Antworten sehr erfreut.

Vielen Dank schon mal.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »crane« (02.07.2014, 23:25)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

03.07.2014, 06:32

Hast Du mal per glGetError geschaut, ob es Fehler gibt? Shader Version 3.3 kann nicht jede Karte.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

3

03.07.2014, 14:21

Error

Ich hab ein Debugging Programm über meinen Code laufen lassen. Hier ist die Ausgabe:

GL Intercept Log. Version : 1.30 Compile Date: Jun 19 2014 Run on: Thu Jul 03 13:38:11 2014

===================================================
GL ERROR - Function glGetAttribLocation generated error GL_INVALID_OPERATION
GL ERROR - Function glVertexAttribPointer generated error GL_INVALID_VALUE
GL ERROR - Function glUseProgram generated error GL_INVALID_OPERATION
GL ERROR - Function glEnableVertexAttribArray generated error GL_INVALID_VALUE
GLDriver - Shutdown - Current OpenGL context 00020000?
GLDriver - Shutdown - Outstanding OpenGL context 00020000 ?
ShaderGLSLManager::Destructor - OpenGL id 3 is still active. (ShaderGLSL Memory leak?)
ShaderGLSLManager::Destructor - OpenGL id 1 is still active. (ShaderGLSL Memory leak?)
ShaderGLSLManager::Destructor - OpenGL id 2 is still active. (ShaderGLSL Memory leak?)
===================================================
Log End.

Was für Lösungen könnten nun in frage kommen. Ich bin noch nicht gut genug um diese zu verstehen und lösungen zu finde.
Würde mich um hilfe freuen.
Viele Dank

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

4

03.07.2014, 14:53

Zitat von »code.google.com/p/glintercept«

GLIntercept has existed since 2003 and was mainly designed as an OpenGL 1.0-2.1 debugger. So while basic function logging should work on all OpenGL versions, the more advanced features listed below may or may not work in OpenGL 3.0+. (especially when using a core OpenGL profile)

Würde ich mit Vorsicht geniesen.
Ich würde besser einfach selber ein paar Fehlerüberprüfungen einrichten.

Werbeanzeige