es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo tener más ranuras de textura en OpenGL?

Estoy aprendiendo OpenGL, cuando estaba usando texturas me di cuenta de que los espacios están limitados a 31, ¿hay alguna manera de usar imágenes para que los espacios no estén limitados, o al menos tener más espacios? También encontré un poco inútil usar locShader en la clase, ya que no utiliza ninguna variable privada para autoasignación, y necesito proporcionar el espacio.

Aquí está el código para texture.h:
“`c++
#ifndef TEXTURE_H
#define TEXTURE_H

#include <glad glad.h="">
#include <std std_image.h="">
#include <shader.h>

class Texture{
public:
Texture(const char *archivo, GLenum repetir, GLenum buffer, GLenum espacio){
glActiveTexture(espacio);
glGenTextures(1, &ID);
glBindTexture(GL_TEXTURE_2D, ID);

<pre><code> stbi_set_flip_vertically_on_load(true);
int anchoImg, altoImg, nrCanales;
unsigned char *datos=stbi_load(archivo, &anchoImg, &altoImg, &nrCanales, 0);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, repetir);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, repetir);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, buffer);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, buffer);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, anchoImg, altoImg, 0, GL_RGBA, GL_UNSIGNED_BYTE, datos);
glGenerateMipmap(GL_TEXTURE_2D);
stbi_image_free(datos);
}
void alocShader(Shader &shader, const char *Loc, GLuint id){
GLuint texUni=glGetUniformLocation(shader.getID(), Loc);
glUseProgram(shader.getID());
glUniform1i(texUni, id);
}
void bind(){
glBindTexture(GL_TEXTURE_2D, ID);
}
void unbind(){
glBindTexture(GL_TEXTURE_2D, 0);
}
void del(){
glDeleteTextures(1, &ID);
}
private:
GLuint ID;
</code></pre>

};

#endif
“`

(Note: The translation provided may not accurately capture the intended meaning or technical context of the original text.)</shader.h>

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El límite de las ranuras de textura en OpenGL suele ser de 32, lo que significa que puedes tener hasta 32 texturas enlazadas en cualquier momento. Si necesitas más de 32 texturas, tendrás que desenlazar algunas de las texturas y enlazar otras según sea necesario. No hay forma de aumentar el número de ranuras más allá de 32.

    En cuanto al uso de locShader en la clase Texture, es cierto que esta función no utiliza ninguna variable privada para asignar automáticamente la ranura de textura. En su lugar, necesitas proporcionar la ranura como un argumento. Esto puede ser un poco engorroso, pero te da más control sobre cómo enlazar las texturas a tus shaders. Si quieres automatizar más el proceso, podrías modificar la función alocShader para que tome un parámetro de ranura opcional que por defecto sea GL_TEXTURE0 (la primera ranura de textura). De esta manera, aún podrías especificar la ranura si lo deseas, pero no tendrías que hacerlo si solo quieres usar la primera ranura disponible.

Comments are closed.