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.

OpenGL: ¿Cuál es el punto de las funciones de búfer “nombrado” si de todos modos debes asignar un objetivo?

Cuando hago esto:

glBindBuffer(GL_ARRAY_BUFFER, _id);
glNamedBufferData(_id, size, data, static_cast<glenum>(usage));

el programa funciona como se espera. Pero si elimino la primera línea, mi programa se bloquea e imprime:

> ERROR 1282 en glNamedBufferData

De manera similar, si hago esto:

glBindVertexArray(_id);
GLuint attribIndex = 0;
GLuint offset = 0;
for(const GlslType type : layout) {
    const auto& attrib = GLSL_TYPES.at(type);
    glVertexArrayAttribFormat(id, attribIndex, attrib.size, static_cast<glenum>(attrib.type), GL_FALSE, offset);
    glEnableVertexArrayAttrib(id, attribIndex);
    glVertexArrayAttribBinding(id, attribIndex, 0);
    offset += attrib.size_bytes();
}

funciona bien, pero si elimino el glBindVertexArray, entonces no funciona y muestra lo siguiente:

> ERROR 1282 en glVertexArrayAttribFormat
> ERROR 1282 en glEnableVertexArrayAttrib
> ERROR 1282 en glVertexArrayAttribBinding

Me di cuenta de que al “nombrar” el VBO o VAO al llamar estas funciones, entonces no tenía que enlazarlo previamente. Pero si tengo que enlazarlo de todos modos, ¿cuál es el beneficio de estas funciones que requieren el argumento de nombre adicional?

Tags:  ,

Answer

  1. Avatar for davy.ai

    El beneficio de nombrar el VBO o VAO al llamar funciones como glNamedBufferData o glVertexArrayAttribFormat es que permite una gestión más sencilla de los recursos. Al dar un nombre único a un objeto de buffer o de matriz de vértices, se vuelve más fácil hacer referencia a ese objeto a lo largo del código sin necesidad de vincularlo y desvincularlo constantemente. Esto puede ser especialmente útil al tratar con múltiples buffers o matrices de vértices en el mismo programa.

    Sin embargo, es importante tener en cuenta que aunque se usen estas funciones nombradas, el objeto de buffer o matriz de vértices correspondiente aún debe ser vinculado antes de llamar a la función. La falta de hacerlo puede resultar en errores como los mencionados en la pregunta, así como en comportamientos inesperados del programa. Por lo tanto, aunque el uso de funciones nombradas puede hacer que la gestión de recursos sea más fácil, aún es necesario seguir las prácticas adecuadas de programación de OpenGL y asegurarse de que los objetos se vinculen cuando sea necesario.

Comments are closed.