--- name: fullscreen_quad kind: function lang: cpp domain: gfx version: "1.0.0" purity: impure signature: "void quad_init(Quad& q); void quad_draw(const Quad& q); void quad_destroy(Quad& q)" description: "VAO/VBO para un fullscreen quad de 6 vértices. El vertex shader genera las posiciones via gl_VertexID, por lo que el VBO queda vacío. quad_draw emite glDrawArrays(GL_TRIANGLES, 0, 6)." tags: [opengl, quad, fullscreen, vao, vbo, gfx] uses_functions: ["gl_loader_cpp_gfx"] uses_types: [] returns: [] returns_optional: false error_type: "error_go_core" imports: [GL/gl.h, GL/glext.h] tested: false tests: [] test_file_path: "" file_path: "cpp/functions/gfx/fullscreen_quad.cpp" framework: opengl params: - name: q desc: "Struct Quad con campos vao, vbo (GL ids). Inicializar a {0} antes de quad_init." output: "Modifica q in-place. quad_draw necesita un programa GL activo con vertex shader que genere posiciones desde gl_VertexID." --- # fullscreen_quad VAO + VBO vacío para dibujar un quad de pantalla completa. El vertex shader de `gl_shader` ya embebe las 6 posiciones via `gl_VertexID`, por lo que no se necesitan datos en el VBO. ## Ejemplo ```cpp fn::gfx::Quad quad{}; fn::gfx::quad_init(quad); // En el render loop (con program activo): glUseProgram(program); fn::gfx::quad_draw(quad); glUseProgram(0); // Al destruir: fn::gfx::quad_destroy(quad); ```