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
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 |
bool Grafics::Texture::LoadImageFromFile(std::string filename) { this->Loaded = false; this->Filename = filename; this->Renderer->MakeCurrent(); int width, height; unsigned char* data = SOIL_load_image(filename.c_str(), &width, &height, 0, SOIL_LOAD_RGBA); if (data == NULL) { return false; } glActiveTexture(GL_TEXTURE0); glGenTextures(1, &this->TextureID); glBindTexture(GL_TEXTURE_2D, this->TextureID); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); //Unbind glBindTexture(GL_TEXTURE_2D,0); this->Width = (float)width; this->Height = (float)height; this->Loaded = true; return true; } |
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 |
this->DeviceContext = GetDC(this->WindowHandle); PIXELFORMATDESCRIPTOR pfd; memset(&pfd, 0, sizeof(PIXELFORMATDESCRIPTOR)); // Clear our PFD pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR); pfd.dwFlags = PFD_DOUBLEBUFFER | PFD_SUPPORT_OPENGL | PFD_DRAW_TO_WINDOW; // Enable double buffering, opengl support and drawing to a window pfd.iPixelType = PFD_TYPE_RGBA; // Set our application to use RGBA pixels pfd.cColorBits = 32; // Give us 32 bits of color information (the higher, the more colors) pfd.cDepthBits = 32; // Give us 32 bits of depth information (the higher, the more depth levels) pfd.iLayerType = PFD_MAIN_PLANE; // Set the layer of the PFD int nPixelFormat = ChoosePixelFormat(this->DeviceContext, &pfd); // Check if our PFD is valid and get a pixel format back if (nPixelFormat == 0) { return false; } BOOL bResult = SetPixelFormat(this->DeviceContext, nPixelFormat, &pfd); // Try and set the pixel format based on our PFD if (!bResult) { return false; } HGLRC tempOpenGLContext = wglCreateContext(this->DeviceContext); // Create an OpenGL 2.1 context for our device context wglMakeCurrent(this->DeviceContext, tempOpenGLContext); // Make the OpenGL 2.1 context current and active //Init Glew GLenum error = glewInit(); // Enable GLEW if (error != GLEW_OK) // If GLEW fails { return false; } int attributes[] = { WGL_CONTEXT_MAJOR_VERSION_ARB, 3, // Set the MAJOR version of OpenGL to 3 WGL_CONTEXT_MINOR_VERSION_ARB, 2, // Set the MINOR version of OpenGL to 2 WGL_CONTEXT_FLAGS_ARB, WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB, // Set our OpenGL context to be forward compatible 0 }; if (wglewIsSupported("WGL_ARB_create_context") == 1) { this->RenderContext = wglCreateContextAttribsARB(this->DeviceContext, NULL, attributes); // Create and OpenGL 3.x context based on the given attributes wglMakeCurrent(NULL, NULL); // Remove the temporary context from being active wglDeleteContext(tempOpenGLContext); // Delete the temporary OpenGL 2.1 context wglMakeCurrent(this->DeviceContext, this->RenderContext); // Make our OpenGL 3.0 context current } else { this->RenderContext = tempOpenGLContext; // If we didn't have support for OpenGL 3.x and up, use the OpenGL 2.1 context } |
C-/C++-Quelltext |
|
1 |
glEnable(GL_TEXTURE_2D); |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 |
glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, this->CurrentTexture->GetTextureID()); // Set the texture in the pixel shader to use the data from the first texture unit. location = glGetUniformLocation(this->ShaderProgram, "ShaderTexture"); if(location == -1) { return; } glUniform1i(location, 0); glBindTexture(GL_TEXTURE_2D,0); |
Zitat von »Schwarzefee«
Kann das Problem mit wxWidgets zusammenhängen?
Zitat von »Schwarzefee«
glBindTexture(GL_TEXTURE_2D,0);
Zitat
Ist falsch.
Siehe zum Beispiel hier: glBindTexture
2. Parameter ist die ID der Textur.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Schwarzefee« (13.03.2014, 22:16)
Zitat von »Schwarzefee«
Beim rendern aktiviere ich dann immer die Texture, die ich benötige.
Werbeanzeige