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
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Von was wolltest du denn darauf umsteigen?
Genau genommen von nichts ! Bisher habe ich mir jeden einzelnen Entrypoint selber mit wglGetProcAddress ausgeben lassen.
Nun, dann gibt es eine ganz gute Daumenregel: Wenn es Dir mehr Vorteile als Nachteile bringt umzustellen (z.B. mehr Zeit spart GLEW komplett fertig zu benutzen als die Umstellung an sich dauert), dann stell's um. Wenn die Nachteile (z.B. der nötige Aufwand in Relation zum Nutzen) aus Deiner Sicht überwiegen, lass es bleiben.
Was verwendest du momentan und was genau ist der Grund aus dem zu gerade zu GLEW umsteigen willst?
der alle OpenGL Funktionen in einen C++ Namespace packt, also statt glDoSomething gl:oSomething
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 |
void CLogo::Draw(int nScreenWidth, int nScreenHight, int nLogoPosX, int nLogoPosY, int nLogoWidth, int nLogoHight) { CVector2 Vertex[6]; CVector2 Texture[6]; float fX1 = 2.0f * (float)nLogoPosX / (float)nScreenWidth - 1.0f; float fY2 = 1.0f - 2.0f * (float)nLogoPosY / (float)nScreenHight; float fX2 = fX1 + (float)nLogoWidth * 2.0f / (float)nScreenWidth; float fY1 = fY2 + (float)nLogoHight * 2.0f / (float)nScreenHight; // triangle 1 Vertex[0] = CVector2(fX1,fY1); Vertex[1] = CVector2(fX1,fY2); Vertex[2] = CVector2(fX2,fY2); // triangle 2 Vertex[3] = CVector2(fX1,fY1); Vertex[4] = CVector2(fX2,fY2); Vertex[5] = CVector2(fX2,fY1); // texture trianngle 1 Texture[0] = CVector2(0.0f, 1.0f); Texture[1] = CVector2(0.0f, 0.0f); Texture[2] = CVector2(1.0f, 0.0f); // texture trianngle 2 Texture[3] = CVector2(0.0f, 1.0f); Texture[4] = CVector2(1.0f, 0.0f); Texture[5] = CVector2(1.0f, 1.0f); glBindBuffer(GL_ARRAY_BUFFER, m_unVBO); glBufferData(GL_ARRAY_BUFFER, sizeof(Vertex) + sizeof(Texture), NULL, GL_DYNAMIC_DRAW); glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(Vertex), Vertex); glBufferSubData(GL_ARRAY_BUFFER, sizeof(Vertex), sizeof(Texture), Texture); glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, (GLvoid*)0); glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, (GLvoid*)sizeof(Vertex)); glEnableVertexAttribArray(0); glEnableVertexAttribArray(1); glBindTexture(GL_TEXTURE_2D, m_unTexture); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glEnable(GL_BLEND); glDrawArrays(GL_TRIANGLES, 0, 6); glDisable(GL_BLEND); glBindTexture(GL_TEXTURE_2D, 0); glDisableVertexAttribArray(0); glDisableVertexAttribArray(1); glBindBuffer(GL_ARRAY_BUFFER, 0); } |
C-/C++-Quelltext |
|
1 |
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, (GLvoid*)0); |
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 |
void CLogo::Draw(int nScreenWidth, int nScreenHight, int nLogoPosX, int nLogoPosY, int nLogoWidth, int nLogoHight) { CVector2 Vertex[6]; CVector2 Texture[6]; float fX1 = 2.0f * (float)nLogoPosX / (float)nScreenWidth - 1.0f; float fY2 = 1.0f - 2.0f * (float)nLogoPosY / (float)nScreenHight; float fX2 = fX1 + (float)nLogoWidth * 2.0f / (float)nScreenWidth; float fY1 = fY2 + (float)nLogoHight * 2.0f / (float)nScreenHight; // triangle 1 Vertex[0] = CVector2(fX1,fY1); Vertex[1] = CVector2(fX1,fY2); Vertex[2] = CVector2(fX2,fY2); // triangle 2 Vertex[3] = CVector2(fX1,fY1); Vertex[4] = CVector2(fX2,fY2); Vertex[5] = CVector2(fX2,fY1); // texture trianngle 1 Texture[0] = CVector2(0.0f, 1.0f); Texture[1] = CVector2(0.0f, 0.0f); Texture[2] = CVector2(1.0f, 0.0f); // texture trianngle 2 Texture[3] = CVector2(0.0f, 1.0f); Texture[4] = CVector2(1.0f, 0.0f); Texture[5] = CVector2(1.0f, 1.0f); glBindVertexArray(m_unVAO); { glBindBuffer(GL_ARRAY_BUFFER, m_unVBO); glBufferData(GL_ARRAY_BUFFER, sizeof(Vertex) + sizeof(Texture), NULL, GL_DYNAMIC_DRAW); glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(Vertex), Vertex); glBufferSubData(GL_ARRAY_BUFFER, sizeof(Vertex), sizeof(Texture), Texture); glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, (GLvoid*)0); glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, (GLvoid*)sizeof(Vertex)); glEnableVertexAttribArray(0); glEnableVertexAttribArray(1); glBindTexture(GL_TEXTURE_2D, m_unTexture); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glEnable(GL_BLEND); glDrawArrays(GL_TRIANGLES, 0, 6); glDisable(GL_BLEND); glBindTexture(GL_TEXTURE_2D, 0); glDisableVertexAttribArray(0); glDisableVertexAttribArray(1); glBindBuffer(GL_ARRAY_BUFFER, 0); } glBindVertexArray(0); } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 |
GLint attribs[] = {WGL_CONTEXT_MAJOR_VERSION_ARB, 3, WGL_CONTEXT_MINOR_VERSION_ARB, 1, 0 }; m_hRC = wglCreateContextAttribsARB(m_hDC, 0, attribs); if (m_hRC == NULL) { std::string strMsg; strMsg = "Creating OpenGL context failed !"; throw strMsg; } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 |
GLint attribs[] = {WGL_CONTEXT_MAJOR_VERSION_ARB, 3, WGL_CONTEXT_MINOR_VERSION_ARB, 2, 0 }; m_hRC = wglCreateContextAttribsARB(m_hDC, 0, attribs); if (m_hRC == NULL) { std::string strMsg; strMsg = "Creating OpenGL context failed !"; throw strMsg; } |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (08.01.2013, 15:46)
Das Default VAO wurde in OpenGL 3.0 deprecated und in OpenGL 3.1 removed, die entsprechenden Calls erzeugen ab hier einen GL_INVALID_OPERATION Error wenn du sie aufrufst ohne dass ein VAO gebunden ist. Ein OpenGL 3.1 Context kann aber wahlweise GL_ARB_compatibility implementieren, was bei deinem Treiber offenbar der Fall ist, weswegen das bei dir mit 3.1 noch funktioniert. Ab OpenGL 3.2 gibt es das Default VAO nur noch im Compatibility Profile, du erzeugst aber einen Core Profile Context und damit funktioniert ohne VAO nichts mehr...
Werbeanzeige