void ShaderProgram::sendVertexAttrib3f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2) { bind(); glVertexAttrib3f(location, v0, v1, v2); unbind(); }
//send the texture coord derivatives on its way void send_dU(Wvec dU) { if (dU_loc) glVertexAttrib3f(dU_loc, GLfloat(dU[0]),GLfloat(dU[1]),GLfloat(dU[2])); }
void obj_display() { // 只有一个物体 mesh *object = globalscene->mList[0].obejct; //bind texture 0 // glUnifor1i( 0) for colorTexture glActiveTexture( GL_TEXTURE0 ); glBindTexture(GL_TEXTURE_2D, globalscene->mList[0].ambTextureId); GLint location0 = glGetUniformLocation(MyShader, "colorTexture"); if(location0 == -1) printf("Cant find texture name: colorTexture\n"); else glUniform1i(location0, 0); //bind texture 1 // glUnifor1i( 1) for diffuse Texture glActiveTexture( GL_TEXTURE1 ); glBindTexture(GL_TEXTURE_2D, globalscene->mList[0].difTextureId); GLint location1 = glGetUniformLocation(MyShader, "diffuseTex"); if(location1 == -1) printf("Cant find texture name: diffuseTex\n"); else glUniform1i(location1, 1); //bind texture 2 // glUnifor1i( 2) for specular Texture glActiveTexture( GL_TEXTURE2 ); glBindTexture(GL_TEXTURE_2D, globalscene->mList[0].spcTextureId); GLint location2 = glGetUniformLocation(MyShader, "specularTex"); if(location2 == -1) printf("Cant find texture name: specularTex\n"); else glUniform1i(location2, 2); // 确定顶点属性的 location,算完切向量后,再设置属性值 tangent_loc = glGetAttribLocation(MyShader, "tangent"); bitangent_loc = glGetAttribLocation(MyShader, "bitangent"); int lastMaterial = -1; for(size_t i=0;i < object->fTotal;++i) { // set material property if this face used different material if(lastMaterial != object->faceList[i].m) { lastMaterial = (int)object->faceList[i].m; glMaterialfv(GL_FRONT, GL_AMBIENT , object->mList[lastMaterial].Ka); glMaterialfv(GL_FRONT, GL_DIFFUSE , object->mList[lastMaterial].Kd); glMaterialfv(GL_FRONT, GL_SPECULAR , object->mList[lastMaterial].Ks); glMaterialfv(GL_FRONT, GL_SHININESS, &object->mList[lastMaterial].Ns); //you can obtain the texture name by object->mList[lastMaterial].map_Kd //load them once in the main function before mainloop //bind them in display function here } // 取得三个顶点 p0 p1 p2 坐标 float *vertex0 = object->vList[object->faceList[i][0].v].ptr; float *vertex1 = object->vList[object->faceList[i][1].v].ptr; float *vertex2 = object->vList[object->faceList[i][2].v].ptr; glm::vec3 p0(vertex0[0], vertex0[1], vertex0[2]); glm::vec3 p1(vertex1[0], vertex1[1], vertex1[2]); glm::vec3 p2(vertex2[0], vertex2[1], vertex2[2]); // 取得贴图三点 对应贴图坐标 float *texture0 = object->tList[object->faceList[i][0].t].ptr; float *texture1 = object->tList[object->faceList[i][1].t].ptr; float *texture2 = object->tList[object->faceList[i][2].t].ptr; glm::vec2 UV0(texture0[0], texture0[1]); glm::vec2 UV1(texture1[0], texture1[1]); glm::vec2 UV2(texture2[0], texture2[1]); // 得到两边 glm::vec3 Edge1 = p1 - p0; glm::vec3 Edge2 = p2 - p0; glm::vec2 Edge1uv = UV1 - UV0; glm::vec2 Edge2uv = UV2 - UV0; // 计算切向量,副切向量 glm::vec3 tangent, bitangent; float cp = Edge1uv.x * Edge2uv.y - Edge2uv.x * Edge1uv.y; if(cp != 0.0f) { float mul = 1.0f /cp; tangent = (Edge1 * Edge2uv.y + Edge2 * -Edge1uv.y) * mul; bitangent = (Edge1 * -Edge2uv.x + Edge2 * Edge1uv.x) * mul; } // specify the value of a generic vertex attribute 设置顶点属性 glVertexAttrib3f(tangent_loc, tangent.x, tangent.y, tangent.z); glVertexAttrib3f(bitangent_loc, bitangent.x, bitangent.y, bitangent.z); glBegin(GL_TRIANGLES); for (size_t j=0;j<3;++j) { //textex corrd. glMultiTexCoord2fv(GL_TEXTURE0, object->tList[object->faceList[i][j].t].ptr); glMultiTexCoord2fv(GL_TEXTURE1, object->tList[object->faceList[i][j].t].ptr); glMultiTexCoord2fv(GL_TEXTURE2, object->tList[object->faceList[i][j].t].ptr); glNormal3fv(object->nList[object->faceList[i][j].n].ptr); glVertex3fv(object->vList[object->faceList[i][j].v].ptr); } glEnd(); } }
void GraphicsContext3D::vertexAttrib3f(GC3Duint index, GC3Dfloat v0, GC3Dfloat v1, GC3Dfloat v2) { makeContextCurrent(); glVertexAttrib3f(index, v0, v1, v2); }
void Pyramid::bindTangentObject(int loc) { glDisableVertexAttribArray(loc); glVertexAttrib3f(loc,1.0f, 0,0); }
void RenderScene(void) { load_vertices("geode_vertices.dat", vertices); load_faces("geode_faces.dat", faces); glGenBuffers(1, &vertex_buffer); glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer); glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(float), &vertices[0], GL_STATIC_DRAW); glVertexAttribPointer(GLT_ATTRIBUTE_VERTEX, 4 ,GL_FLOAT,GL_FALSE, sizeof(float) * 7, (const GLvoid *)0); glVertexAttribPointer(GLT_ATTRIBUTE_NORMAL, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 7, (const GLvoid *)(4*sizeof(float)) ); glEnableVertexAttribArray(GLT_ATTRIBUTE_VERTEX); glEnableVertexAttribArray(GLT_ATTRIBUTE_NORMAL); //--- glGenBuffers(1, &faces_buffer); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, faces_buffer); glBufferData(GL_ELEMENT_ARRAY_BUFFER, faces.size() * sizeof(GLuint), &faces[0], GL_STATIC_DRAW); //--- // Clear the window with current clearing color glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); // Obracanie widoku float angle =timer.GetElapsedSeconds()*PI/4; posVector[0] = -8.0f * cos(angle / 2.0f); posVector[1] = -8.0f * sin(angle / 2.0f); posVector[2] = 5.0f; swiatlo0.position[0] = 8.0f * cos(-angle); swiatlo0.position[1] = 15.0f * sin(-angle); swiatlo0.position[2] = 5.0f; LookAt(viewFrame, posVector, atVector, upVector); geometryPipeline.SetMatrixStacks(modelView,projection); projection.LoadMatrix(viewFrustum.GetProjectionMatrix()); modelView.PushMatrix(); M3DMatrix44f mCamera; viewFrame.GetCameraMatrix(mCamera); modelView.LoadMatrix(mCamera); modelView.PushMatrix(); //glUseProgram(shader); modelView.Translate(swiatlo0.position[0], swiatlo0.position[1], swiatlo0.position[2]); glUniformMatrix4fv(MVPMatrixLocation,1,GL_FALSE,geometryPipeline.GetModelViewProjectionMatrix()); modelView.PopMatrix(); //mno¿enie macierzy //modelView.MultMatrix(mCamera); // modelView.PushMatrix(); //m3dMatrixMultiply44(mModelViewProjection, viewFrustum.GetProjectionMatrix(), mCamera); // wrzucanie do shadera glUniformMatrix3fv(NMatrixLocation, 1, GL_FALSE, geometryPipeline.GetNormalMatrix()); glUniformMatrix4fv(VMmatrixLocation, 1, GL_FALSE, mCamera); glUniform3fv(iambient_component_location, 1, iambient_component); glUniform3fv(swiatlo0_location, 1, swiatlo0.position); glUniform3fv(swiatlo0_idiffuse_location, 1, swiatlo0.idiffuse); glUniform3fv(swiatlo0_ispecular_location, 1, swiatlo0.ispecular); glUniform3fv(swiatlo0_attenuation_location, 1, swiatlo0.attenuation); glUniform1f(material0_ka_location, material0.ka); glUniform1f(material0_kd_location, material0.kd); glUniform1f(material0_ks_location, material0.ks); glUniform1f(material0_alpha_location, material0.alpha); //-- glUniformMatrix4fv(MVPMatrixLocation, 1, GL_FALSE, geometryPipeline.GetModelViewProjectionMatrix()); glUniformMatrix4fv(MVMatrixLocation, 1, GL_FALSE, geometryPipeline.GetModelViewMatrix()); //DrawPramid(0.5,0.0,1.0); drawTriangles(20,ico_vertices,ico_faces); // rysowanie siatki -------------------------------------------------------------------------- glEnable(GL_CULL_FACE); glPolygonOffset(1.0f, 1.0f); glVertexAttrib3f(GLT_ATTRIBUTE_COLOR, 1.0, 1.0, 1.0); glEnable(GL_POLYGON_OFFSET_FILL); glBegin(GL_QUADS); glVertex3f(10, -10.0f, 0.0f); glVertex3f(-10, -10.0f, 0.0f); glVertex3f(-10, 10.0f, 0.0f); glVertex3f(10, 10.0f, 0.0f); glEnd(); glDisable(GL_POLYGON_OFFSET_FILL); glVertexAttrib3f(GLT_ATTRIBUTE_COLOR, 1.0, 1.0, 1.0); for(int i=-10;i<=10;i++){ glBegin(GL_LINES); glVertex3f((float)i, -10.0f, 0.0f); glVertex3f((float)i, 10.0f, 0.0f); glEnd(); } for(int i=-10;i<=10;i++){ glBegin(GL_LINES); glVertex3f(-10.0f, (float)i, 0.0f); glVertex3f(10.0f, (float)i, 0.0f); glEnd(); } glDisable(GL_CULL_FACE); //sphereBatch.Draw(); glUniformMatrix4fv(MVPMatrixLocation, 1, GL_FALSE, geometryPipeline.GetModelViewProjectionMatrix()); glUniformMatrix4fv(MVMatrixLocation, 1, GL_FALSE, geometryPipeline.GetModelViewMatrix()); modelView.PopMatrix(); // rysowanie siatki - koniec ------------------------------------------------------------------- //matrixStack.Translate(10.0f,1.0f,0.0f); // macierz translacji i macierz rotacji //M3DMatrix44f mT,mR; // m3dTranslationMatrix44(mT,0.0f,3.0f,0.0f); //m3dRotationMatrix44(mR, angle, 0.0f, 0.0f, 1.0f); //mno¿enie macierzy translacji i macierzy rotacji //m3dMatrixMultiply44(mM,mT,mR); //mno¿enie macierzy przekszta³ceñ i macierzy projekcji modelwidok // m3dMatrixMultiply44(mModelViewProjection,mModelViewProjection, mM); //wysy³anie macierzy projekcji modelwidok do shadera //glUniformMatrix4fv(MVPMatrixLocation, 1, GL_FALSE, mModelViewProjection); //TriangleFace(position,color,atVector); //DrawPramid(0.5,0.0,1.0); //drawTriangles(20, ico_vertices, ico_faces); //matrixStack.PopMatrix(); //matrixStack.Rotate(45.0,0,0,1); //matrixStack.Translate(0.0,0.0,1.0); //glUniformMatrix4fv(MVPMatrixLocation,1,GL_FALSE,geometryPipeline.GetModelViewProjectionMatrix()); //DrawPramid(0.5,0.0,1.0); glUniformMatrix4fv(MVPMatrixLocation, 1, GL_FALSE, geometryPipeline.GetModelViewProjectionMatrix()); glUniformMatrix4fv(MVMatrixLocation, 1, GL_FALSE, geometryPipeline.GetModelViewMatrix()); modelView.PopMatrix(); glUseProgram(Pshader);//wywo³anie shadera // Perform the buffer swap to display back buffer glutSwapBuffers(); glutPostRedisplay(); }
void RenderScene(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); glUseProgram(shader); GLMatrixStack modelView; GLMatrixStack projection; GLGeometryTransform geometryPipeline; geometryPipeline.SetMatrixStacks(modelView,projection); M3DVector3f at={0,0,0}; M3DVector3f up={0,0,1}; M3DVector3f eye; float angle=timer.GetElapsedSeconds()*3.14f; eye[0]=40*cos(angle); eye[1]=40*sin(angle); eye[2]=30.0f; LookAt(frame,eye,at,up); projection.LoadMatrix(frustum.GetProjectionMatrix()); modelView.PushMatrix(); M3DMatrix44f mCamera; frame.GetCameraMatrix(mCamera); modelView.LoadMatrix(mCamera); modelView.PushMatrix(); glUniformMatrix4fv(MVPMatrixLocation,1,GL_FALSE,geometryPipeline.GetModelViewProjectionMatrix()); glBegin(GL_LINES); glVertexAttrib3f(GLT_ATTRIBUTE_COLOR, 0.5f, 0.5f, 0.5f); for (int i=-10; i<=10; i++) { glVertex3f(i,-10.0f,0); glVertex3f(i,10.0f,0); glVertex3f(-10.0f,i,0); glVertex3f(10.0f,i,0); } glEnd(); modelView.Translate(10.0f,1.0f,0.0f); glUniformMatrix4fv(MVPMatrixLocation,1,GL_FALSE,geometryPipeline.GetModelViewProjectionMatrix()); glBegin(GL_QUADS); glVertexAttrib3f(GLT_ATTRIBUTE_COLOR, 0.5f, 0.5f, 0.5f); glVertex3f(-1.0f,-1.0f,0.0f); glVertex3f(-1.0f,1.0f,0.0f); glVertex3f(1.0f,1.0f,0.0f); glVertex3f(1.0f,-1.0f,0.0f); glEnd(); glBegin(GL_TRIANGLES); glVertexAttrib3f(GLT_ATTRIBUTE_COLOR, 1.0f, 1.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 0.0f); glVertex3f(0.0f, 0.0f, 2.0f); glVertex3f(1.0f, 1.0f, 0.0f); glVertexAttrib3f(GLT_ATTRIBUTE_COLOR, 0.0f, 0.0f, 0.8f); glVertex3f(-1.0f, -1.0f, 0.0f); glVertex3f(0.0f, 0.0f, 2.0f); glVertex3f(-1.0f, 1.0f, 0.0f); glVertexAttrib3f(GLT_ATTRIBUTE_COLOR, 0.0f, 1.0f, 0.0f); glVertex3f(1.0f, -1.0f, 0.0f); glVertex3f(0.0f, 0.0f, 2.0f); glVertex3f(-1.0f, -1.0f, 0.0f); glVertexAttrib3f(GLT_ATTRIBUTE_COLOR, 1.0f, 0.0f, 0.0f); glVertex3f(1.0f, 1.0f, 0.0f); glVertex3f(0.0f, 0.0f, 2.0f); glVertex3f(1.0f, -1.0f, 0.0f); glEnd(); modelView.PopMatrix(); modelView.Rotate(45.0,0,0,1); modelView.Translate(0.0,0.0,1.0); glUniformMatrix4fv(MVPMatrixLocation,1,GL_FALSE,geometryPipeline.GetModelViewProjectionMatrix()); glBegin(GL_QUADS); glVertexAttrib3f(GLT_ATTRIBUTE_COLOR, 0.5f, 0.5f, 0.5f); glVertex3f(-1.0f,-1.0f,0.0f); glVertex3f(-1.0f,1.0f,0.0f); glVertex3f(1.0f,1.0f,0.0f); glVertex3f(1.0f,-1.0f,0.0f); glEnd(); glBegin(GL_TRIANGLES); glVertexAttrib3f(GLT_ATTRIBUTE_COLOR, 1.0f, 1.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 0.0f); glVertex3f(0.0f, 0.0f, 2.0f); glVertex3f(1.0f, 1.0f, 0.0f); glVertexAttrib3f(GLT_ATTRIBUTE_COLOR, 0.0f, 0.0f, 0.8f); glVertex3f(-1.0f, -1.0f, 0.0f); glVertex3f(0.0f, 0.0f, 2.0f); glVertex3f(-1.0f, 1.0f, 0.0f); glVertexAttrib3f(GLT_ATTRIBUTE_COLOR, 0.0f, 1.0f, 0.0f); glVertex3f(1.0f, -1.0f, 0.0f); glVertex3f(0.0f, 0.0f, 2.0f); glVertex3f(-1.0f, -1.0f, 0.0f); glVertexAttrib3f(GLT_ATTRIBUTE_COLOR, 1.0f, 0.0f, 0.0f); glVertex3f(1.0f, 1.0f, 0.0f); glVertex3f(0.0f, 0.0f, 2.0f); glVertex3f(1.0f, -1.0f, 0.0f); glEnd(); modelView.PopMatrix(); modelView.PopMatrix(); glutSwapBuffers(); glutPostRedisplay(); }
void RenderScene(void) { // Clear the window with current clearing color glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); glUseProgram(shader); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glBegin(GL_QUADS); //podstawa piramidy glColor3f(0.8f, 0.8f, 0.7f); glVertex3f(1.0f, 1.0f, 0.0f);//gorne prawe zaczepienie glVertex3f(-1.0f, 1.0f, 0.0f);//gorne lewe zaczepinie glVertex3f(1.0f, -1.0f, 0.0f);//prawe zaczepienie glVertex3f(-1.0f, -1.0f, 0.0f);//lewe zaczepienie glEnd(); glBegin(GL_TRIANGLES); glVertexAttrib3f(GLT_ATTRIBUTE_COLOR, 1.0, 0.0, 0.0); //tylna œciana (trójk¹t) glColor3f(1.0f, 1.0f, 0.0f); glVertex3f(1.0f, 1.0f, 0.0f);//prawe zaczepinie glVertex3f(-1.0f, 1.0f, 0.0f);//lewe zaczepinie glVertex3f(0.0f, 0.0f, 1.0f);// gora //prawa œciana glColor3f(1.0f, 0.0f, 0.0f); glVertex3f(1.0f, -1.0f, 0.0f);// prawy glVertex3f(1.0f, 1.0f, 0.0f);//lewy (patrz¹c na trójk¹t) glVertex3f(0.0f, 0.0f, 1.0f);//gorny //lewa œciana glColor3f(0.0f, 0.0f, 0.4f); glVertex3f(-1.0f, 1.0f, 0.0f);//prawy glVertex3f(-1.0f, -1.0f, 0.0f);//lewy (patrz¹c na trójk¹t) glVertex3f(0.0f, 0.0f, 1.0f);// gora //przednia œciana glColor4f(0.05f, 1.0f, 0.3f, 0.4f); glVertex3f(1.0f, -1.0f, 0.0f);//prawy glVertex3f(-1.0f, -1.0f, 0.0f);//lewy glVertex3f(0.0f, 0.0f, 1.0f);// gorny glEnd(); // animacja CStopWatch timer; M3DVector3f at={0,0,0}; M3DVector3f up={0,0,1}; M3DVector3f eye; float angle = timer.GetElapsedSeconds()* M3D_PI; eye[0]=4.0f*cos(angle); eye[1]=3.0f*sin(angle); eye[2]=5.0f; //LookAt(cameraFrame,eye,at,up); glRotatef(0.2,0,-0.3, 0); // Perform the buffer swap to display back buffer glutSwapBuffers(); glutPostRedisplay(); }
void VecSliderMenuItem::DrawNormalVecView(const Camera& curCamera, float x, float y, float w, float h, const vec3& normal) { GLint mvpLoc = g_normalViewShader->m_uniforms[BIND_Mvp]; GLint colorLoc = g_normalViewShader->m_attrs[GEOM_Color]; GLint posLoc = g_normalViewShader->m_attrs[GEOM_Pos]; GLint coordLoc = g_normalViewShader->m_attrs[GEOM_Uv]; GLint stippleLoc = g_normalViewShader->m_custom[NORMALBIND_Stipple]; ViewportState vpState(x, g_screen.m_height-y-h, w, h); ScissorState scState(x, g_screen.m_height-y-h, w, h); glClearColor(0.05f,0.05f,0.05f,1.f); glClear(GL_DEPTH_BUFFER_BIT|GL_COLOR_BUFFER_BIT); Camera localcamera = curCamera; localcamera.SetPos(-4.f * curCamera.GetViewframe().m_fwd); localcamera.Compute(); mat4 proj = Compute3DProj(30.f, w/h, 0.1, 5); mat4 mvp = proj * localcamera.GetView(); glUseProgram(g_normalViewShader->m_program); glUniformMatrix4fv(mvpLoc, 1, 0, mvp.m); glUniform1f(stippleLoc, 0); glBegin(GL_LINES); // axes glVertexAttrib3f(colorLoc, 1, 0, 0); glVertexAttrib1f(coordLoc, 0); glVertexAttrib3f(posLoc, 0, 0, 0); glVertexAttrib1f(coordLoc, 1); glVertexAttrib3f(posLoc, 1, 0, 0); glVertexAttrib3f(colorLoc, 0.2, 0, 0); glVertexAttrib1f(coordLoc, 0); glVertexAttrib3f(posLoc, 0, 0, 0); glVertexAttrib1f(coordLoc, 1); glVertexAttrib3f(posLoc, -1, 0, 0); glVertexAttrib3f(colorLoc, 0, 1, 0); glVertexAttrib1f(coordLoc, 0); glVertexAttrib3f(posLoc, 0, 0, 0); glVertexAttrib1f(coordLoc, 1); glVertexAttrib3f(posLoc, 0, 1, 0); glVertexAttrib3f(colorLoc, 0, 0.2, 0); glVertexAttrib1f(coordLoc, 0); glVertexAttrib3f(posLoc, 0, 0, 0); glVertexAttrib1f(coordLoc, 1); glVertexAttrib3f(posLoc, 0, -1, 0); glVertexAttrib3f(colorLoc, 0, 0, 1); glVertexAttrib1f(coordLoc, 0); glVertexAttrib3f(posLoc, 0, 0, 0); glVertexAttrib1f(coordLoc, 1); glVertexAttrib3f(posLoc, 0, 0, 1); glVertexAttrib3f(colorLoc, 0, 0, 0.2); glVertexAttrib1f(coordLoc, 0); glVertexAttrib3f(posLoc, 0, 0, 0); glVertexAttrib1f(coordLoc, 1); glVertexAttrib3f(posLoc, 0, 0, -1); // vector glVertexAttrib3f(colorLoc, 0.7, 0.7, 0.7); glVertexAttrib3f(posLoc, 0, 0, 0); glVertexAttrib3fv(posLoc, &normal.x); glEnd(); // helper lines static Color kColNeg = {0.2,0.2,0.2}, kColPos = {0.4,0.4,0.4}; glUniform1f(stippleLoc, 0.1f); glBegin(GL_LINES); glVertexAttrib3fv(colorLoc, normal.x > 0 ? &kColPos.r : &kColNeg.r); glVertexAttrib1f(coordLoc, 0); glVertexAttrib3f(posLoc, 0, normal.y, 0); glVertexAttrib1f(coordLoc, normal.x); glVertexAttrib3f(posLoc, normal.x, normal.y, 0); glVertexAttrib3fv(colorLoc, normal.y > 0 ? &kColPos.r : &kColNeg.r); glVertexAttrib1f(coordLoc, 0); glVertexAttrib3f(posLoc, normal.x, 0, 0); glVertexAttrib1f(coordLoc, normal.y); glVertexAttrib3f(posLoc, normal.x, normal.y, 0); glVertexAttrib3fv(colorLoc, normal.z > 0 ? &kColPos.r : &kColNeg.r); glVertexAttrib1f(coordLoc, 0); glVertexAttrib3f(posLoc, normal.x, normal.y, 0); glVertexAttrib1f(coordLoc, normal.z); glVertexAttrib3fv(posLoc, &normal.x); glEnd(); glLineWidth(1.f); checkGlError("menu_DrawNormalVecView"); }
void Shader::setAttribute(const GLchar *uniformName, GLfloat x, GLfloat y, GLfloat z) { GLint location = glGetUniformLocation(shaderProgram, uniformName); glVertexAttrib3f(location, x, y, z); }
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_GL20_nglVertexAttrib3f(JNIEnv *env, jclass clazz, jint index, jfloat x, jfloat y, jfloat z, jlong function_pointer) { glVertexAttrib3fPROC glVertexAttrib3f = (glVertexAttrib3fPROC)((intptr_t)function_pointer); glVertexAttrib3f(index, x, y, z); }
void PShader::setAttribute(std::string name, GLfloat v0, GLfloat v1, GLfloat v2) { glVertexAttrib3f(glGetAttribLocation(glProgram, name.c_str()), v0, v1, v2); }
void attrib(const char* loc, const vec3& v) { GLuint i = glGetAttribLocation(program, loc); glVertexAttrib3f(i, v.x, v.y, v.z); }
void send_dV(Wvec dV) { if (dV_loc) glVertexAttrib3f(dV_loc, GLfloat(dV[0]),GLfloat(dV[1]),GLfloat(dV[2])); }
// 3{f,d,s,fv,dv,sv} void shader_gl3::attribute(const char* name, const float& arg1, const float& arg2, const float& arg3) const { A2E_CHECK_ATTRIBUTE_EXISTENCE(name); A2E_CHECK_ATTRIBUTE_TYPE(name, GL_FLOAT_VEC3); glVertexAttrib3f(A2E_SHADER_GET_ATTRIBUTE_POSITION(name), arg1, arg2, arg3); }
uintptr_t processFn(struct fnargs* args, char* parg) { uintptr_t ret = 0; switch (args->fn) { case glfnUNDEFINED: abort(); // bad glfn break; case glfnActiveTexture: glActiveTexture((GLenum)args->a0); break; case glfnAttachShader: glAttachShader((GLint)args->a0, (GLint)args->a1); break; case glfnBindAttribLocation: glBindAttribLocation((GLint)args->a0, (GLint)args->a1, (GLchar*)args->a2); break; case glfnBindBuffer: glBindBuffer((GLenum)args->a0, (GLuint)args->a1); break; case glfnBindFramebuffer: glBindFramebuffer((GLenum)args->a0, (GLint)args->a1); break; case glfnBindRenderbuffer: glBindRenderbuffer((GLenum)args->a0, (GLint)args->a1); break; case glfnBindTexture: glBindTexture((GLenum)args->a0, (GLint)args->a1); break; case glfnBlendColor: glBlendColor(*(GLfloat*)&args->a0, *(GLfloat*)&args->a1, *(GLfloat*)&args->a2, *(GLfloat*)&args->a3); break; case glfnBlendEquation: glBlendEquation((GLenum)args->a0); break; case glfnBlendEquationSeparate: glBlendEquationSeparate((GLenum)args->a0, (GLenum)args->a1); break; case glfnBlendFunc: glBlendFunc((GLenum)args->a0, (GLenum)args->a1); break; case glfnBlendFuncSeparate: glBlendFuncSeparate((GLenum)args->a0, (GLenum)args->a1, (GLenum)args->a2, (GLenum)args->a3); break; case glfnBufferData: glBufferData((GLenum)args->a0, (GLsizeiptr)args->a1, (GLvoid*)parg, (GLenum)args->a2); break; case glfnBufferSubData: glBufferSubData((GLenum)args->a0, (GLint)args->a1, (GLsizeiptr)args->a2, (GLvoid*)parg); break; case glfnCheckFramebufferStatus: ret = glCheckFramebufferStatus((GLenum)args->a0); break; case glfnClear: glClear((GLenum)args->a0); break; case glfnClearColor: glClearColor(*(GLfloat*)&args->a0, *(GLfloat*)&args->a1, *(GLfloat*)&args->a2, *(GLfloat*)&args->a3); break; case glfnClearDepthf: glClearDepthf(*(GLfloat*)&args->a0); break; case glfnClearStencil: glClearStencil((GLint)args->a0); break; case glfnColorMask: glColorMask((GLboolean)args->a0, (GLboolean)args->a1, (GLboolean)args->a2, (GLboolean)args->a3); break; case glfnCompileShader: glCompileShader((GLint)args->a0); break; case glfnCompressedTexImage2D: glCompressedTexImage2D((GLenum)args->a0, (GLint)args->a1, (GLenum)args->a2, (GLint)args->a3, (GLint)args->a4, (GLint)args->a5, (GLsizeiptr)args->a6, (GLvoid*)parg); break; case glfnCompressedTexSubImage2D: glCompressedTexSubImage2D((GLenum)args->a0, (GLint)args->a1, (GLint)args->a2, (GLint)args->a3, (GLint)args->a4, (GLint)args->a5, (GLenum)args->a6, (GLsizeiptr)args->a7, (GLvoid*)parg); break; case glfnCopyTexImage2D: glCopyTexImage2D((GLenum)args->a0, (GLint)args->a1, (GLenum)args->a2, (GLint)args->a3, (GLint)args->a4, (GLint)args->a5, (GLint)args->a6, (GLint)args->a7); break; case glfnCopyTexSubImage2D: glCopyTexSubImage2D((GLenum)args->a0, (GLint)args->a1, (GLint)args->a2, (GLint)args->a3, (GLint)args->a4, (GLint)args->a5, (GLint)args->a6, (GLint)args->a7); break; case glfnCreateProgram: ret = glCreateProgram(); break; case glfnCreateShader: ret = glCreateShader((GLenum)args->a0); break; case glfnCullFace: glCullFace((GLenum)args->a0); break; case glfnDeleteBuffer: glDeleteBuffers(1, (const GLuint*)(&args->a0)); break; case glfnDeleteFramebuffer: glDeleteFramebuffers(1, (const GLuint*)(&args->a0)); break; case glfnDeleteProgram: glDeleteProgram((GLint)args->a0); break; case glfnDeleteRenderbuffer: glDeleteRenderbuffers(1, (const GLuint*)(&args->a0)); break; case glfnDeleteShader: glDeleteShader((GLint)args->a0); break; case glfnDeleteTexture: glDeleteTextures(1, (const GLuint*)(&args->a0)); break; case glfnDepthFunc: glDepthFunc((GLenum)args->a0); break; case glfnDepthMask: glDepthMask((GLboolean)args->a0); break; case glfnDepthRangef: glDepthRangef(*(GLfloat*)&args->a0, *(GLfloat*)&args->a1); break; case glfnDetachShader: glDetachShader((GLint)args->a0, (GLint)args->a1); break; case glfnDisable: glDisable((GLenum)args->a0); break; case glfnDisableVertexAttribArray: glDisableVertexAttribArray((GLint)args->a0); break; case glfnDrawArrays: glDrawArrays((GLenum)args->a0, (GLint)args->a1, (GLint)args->a2); break; case glfnDrawElements: glDrawElements((GLenum)args->a0, (GLint)args->a1, (GLenum)args->a2, (void*)args->a3); break; case glfnEnable: glEnable((GLenum)args->a0); break; case glfnEnableVertexAttribArray: glEnableVertexAttribArray((GLint)args->a0); break; case glfnFinish: glFinish(); break; case glfnFlush: glFlush(); break; case glfnFramebufferRenderbuffer: glFramebufferRenderbuffer((GLenum)args->a0, (GLenum)args->a1, (GLenum)args->a2, (GLint)args->a3); break; case glfnFramebufferTexture2D: glFramebufferTexture2D((GLenum)args->a0, (GLenum)args->a1, (GLenum)args->a2, (GLint)args->a3, (GLint)args->a4); break; case glfnFrontFace: glFrontFace((GLenum)args->a0); break; case glfnGenBuffer: glGenBuffers(1, (GLuint*)&ret); break; case glfnGenFramebuffer: glGenFramebuffers(1, (GLuint*)&ret); break; case glfnGenRenderbuffer: glGenRenderbuffers(1, (GLuint*)&ret); break; case glfnGenTexture: glGenTextures(1, (GLuint*)&ret); break; case glfnGenerateMipmap: glGenerateMipmap((GLenum)args->a0); break; case glfnGetActiveAttrib: glGetActiveAttrib( (GLuint)args->a0, (GLuint)args->a1, (GLsizei)args->a2, NULL, (GLint*)&ret, (GLenum*)args->a3, (GLchar*)parg); break; case glfnGetActiveUniform: glGetActiveUniform( (GLuint)args->a0, (GLuint)args->a1, (GLsizei)args->a2, NULL, (GLint*)&ret, (GLenum*)args->a3, (GLchar*)parg); break; case glfnGetAttachedShaders: glGetAttachedShaders((GLuint)args->a0, (GLsizei)args->a1, (GLsizei*)&ret, (GLuint*)parg); break; case glfnGetAttribLocation: ret = glGetAttribLocation((GLint)args->a0, (GLchar*)args->a1); break; case glfnGetBooleanv: glGetBooleanv((GLenum)args->a0, (GLboolean*)parg); break; case glfnGetBufferParameteri: glGetBufferParameteriv((GLenum)args->a0, (GLenum)args->a1, (GLint*)&ret); break; case glfnGetFloatv: glGetFloatv((GLenum)args->a0, (GLfloat*)parg); break; case glfnGetIntegerv: glGetIntegerv((GLenum)args->a0, (GLint*)parg); break; case glfnGetError: ret = glGetError(); break; case glfnGetFramebufferAttachmentParameteriv: glGetFramebufferAttachmentParameteriv((GLenum)args->a0, (GLenum)args->a1, (GLenum)args->a2, (GLint*)&ret); break; case glfnGetProgramiv: glGetProgramiv((GLint)args->a0, (GLenum)args->a1, (GLint*)&ret); break; case glfnGetProgramInfoLog: glGetProgramInfoLog((GLuint)args->a0, (GLsizei)args->a1, 0, (GLchar*)parg); break; case glfnGetRenderbufferParameteriv: glGetRenderbufferParameteriv((GLenum)args->a0, (GLenum)args->a1, (GLint*)&ret); break; case glfnGetShaderiv: glGetShaderiv((GLint)args->a0, (GLenum)args->a1, (GLint*)&ret); break; case glfnGetShaderInfoLog: glGetShaderInfoLog((GLuint)args->a0, (GLsizei)args->a1, 0, (GLchar*)parg); break; case glfnGetShaderPrecisionFormat: glGetShaderPrecisionFormat((GLenum)args->a0, (GLenum)args->a1, (GLint*)parg, &((GLint*)parg)[2]); break; case glfnGetShaderSource: glGetShaderSource((GLuint)args->a0, (GLsizei)args->a1, 0, (GLchar*)parg); break; case glfnGetString: ret = (uintptr_t)glGetString((GLenum)args->a0); break; case glfnGetTexParameterfv: glGetTexParameterfv((GLenum)args->a0, (GLenum)args->a1, (GLfloat*)parg); break; case glfnGetTexParameteriv: glGetTexParameteriv((GLenum)args->a0, (GLenum)args->a1, (GLint*)parg); break; case glfnGetUniformfv: glGetUniformfv((GLuint)args->a0, (GLint)args->a1, (GLfloat*)parg); break; case glfnGetUniformiv: glGetUniformiv((GLuint)args->a0, (GLint)args->a1, (GLint*)parg); break; case glfnGetUniformLocation: ret = glGetUniformLocation((GLint)args->a0, (GLchar*)args->a1); break; case glfnGetVertexAttribfv: glGetVertexAttribfv((GLuint)args->a0, (GLenum)args->a1, (GLfloat*)parg); break; case glfnGetVertexAttribiv: glGetVertexAttribiv((GLuint)args->a0, (GLenum)args->a1, (GLint*)parg); break; case glfnHint: glHint((GLenum)args->a0, (GLenum)args->a1); break; case glfnIsBuffer: ret = glIsBuffer((GLint)args->a0); break; case glfnIsEnabled: ret = glIsEnabled((GLenum)args->a0); break; case glfnIsFramebuffer: ret = glIsFramebuffer((GLint)args->a0); break; case glfnIsProgram: ret = glIsProgram((GLint)args->a0); break; case glfnIsRenderbuffer: ret = glIsRenderbuffer((GLint)args->a0); break; case glfnIsShader: ret = glIsShader((GLint)args->a0); break; case glfnIsTexture: ret = glIsTexture((GLint)args->a0); break; case glfnLineWidth: glLineWidth(*(GLfloat*)&args->a0); break; case glfnLinkProgram: glLinkProgram((GLint)args->a0); break; case glfnPixelStorei: glPixelStorei((GLenum)args->a0, (GLint)args->a1); break; case glfnPolygonOffset: glPolygonOffset(*(GLfloat*)&args->a0, *(GLfloat*)&args->a1); break; case glfnReadPixels: glReadPixels((GLint)args->a0, (GLint)args->a1, (GLsizei)args->a2, (GLsizei)args->a3, (GLenum)args->a4, (GLenum)args->a5, (void*)parg); break; case glfnReleaseShaderCompiler: glReleaseShaderCompiler(); break; case glfnRenderbufferStorage: glRenderbufferStorage((GLenum)args->a0, (GLenum)args->a1, (GLint)args->a2, (GLint)args->a3); break; case glfnSampleCoverage: glSampleCoverage(*(GLfloat*)&args->a0, (GLboolean)args->a1); break; case glfnScissor: glScissor((GLint)args->a0, (GLint)args->a1, (GLint)args->a2, (GLint)args->a3); break; case glfnShaderSource: #if defined(os_ios) || defined(os_osx) glShaderSource((GLuint)args->a0, (GLsizei)args->a1, (const GLchar *const *)args->a2, NULL); #else glShaderSource((GLuint)args->a0, (GLsizei)args->a1, (const GLchar **)args->a2, NULL); #endif break; case glfnStencilFunc: glStencilFunc((GLenum)args->a0, (GLint)args->a1, (GLuint)args->a2); break; case glfnStencilFuncSeparate: glStencilFuncSeparate((GLenum)args->a0, (GLenum)args->a1, (GLint)args->a2, (GLuint)args->a3); break; case glfnStencilMask: glStencilMask((GLuint)args->a0); break; case glfnStencilMaskSeparate: glStencilMaskSeparate((GLenum)args->a0, (GLuint)args->a1); break; case glfnStencilOp: glStencilOp((GLenum)args->a0, (GLenum)args->a1, (GLenum)args->a2); break; case glfnStencilOpSeparate: glStencilOpSeparate((GLenum)args->a0, (GLenum)args->a1, (GLenum)args->a2, (GLenum)args->a3); break; case glfnTexImage2D: glTexImage2D( (GLenum)args->a0, (GLint)args->a1, (GLint)args->a2, (GLsizei)args->a3, (GLsizei)args->a4, 0, // border (GLenum)args->a5, (GLenum)args->a6, (const GLvoid*)parg); break; case glfnTexSubImage2D: glTexSubImage2D( (GLenum)args->a0, (GLint)args->a1, (GLint)args->a2, (GLint)args->a3, (GLsizei)args->a4, (GLsizei)args->a5, (GLenum)args->a6, (GLenum)args->a7, (const GLvoid*)parg); break; case glfnTexParameterf: glTexParameterf((GLenum)args->a0, (GLenum)args->a1, *(GLfloat*)&args->a2); break; case glfnTexParameterfv: glTexParameterfv((GLenum)args->a0, (GLenum)args->a1, (GLfloat*)parg); break; case glfnTexParameteri: glTexParameteri((GLenum)args->a0, (GLenum)args->a1, (GLint)args->a2); break; case glfnTexParameteriv: glTexParameteriv((GLenum)args->a0, (GLenum)args->a1, (GLint*)parg); break; case glfnUniform1f: glUniform1f((GLint)args->a0, *(GLfloat*)&args->a1); break; case glfnUniform1fv: glUniform1fv((GLint)args->a0, (GLsizeiptr)args->a1, (GLvoid*)parg); break; case glfnUniform1i: glUniform1i((GLint)args->a0, (GLint)args->a1); break; case glfnUniform1iv: glUniform1iv((GLint)args->a0, (GLsizeiptr)args->a1, (GLvoid*)parg); break; case glfnUniform2f: glUniform2f((GLint)args->a0, *(GLfloat*)&args->a1, *(GLfloat*)&args->a2); break; case glfnUniform2fv: glUniform2fv((GLint)args->a0, (GLsizeiptr)args->a1, (GLvoid*)parg); break; case glfnUniform2i: glUniform2i((GLint)args->a0, (GLint)args->a1, (GLint)args->a2); break; case glfnUniform2iv: glUniform2iv((GLint)args->a0, (GLsizeiptr)args->a1, (GLvoid*)parg); break; case glfnUniform3f: glUniform3f((GLint)args->a0, *(GLfloat*)&args->a1, *(GLfloat*)&args->a2, *(GLfloat*)&args->a3); break; case glfnUniform3fv: glUniform3fv((GLint)args->a0, (GLsizeiptr)args->a1, (GLvoid*)parg); break; case glfnUniform3i: glUniform3i((GLint)args->a0, (GLint)args->a1, (GLint)args->a2, (GLint)args->a3); break; case glfnUniform3iv: glUniform3iv((GLint)args->a0, (GLsizeiptr)args->a1, (GLvoid*)parg); break; case glfnUniform4f: glUniform4f((GLint)args->a0, *(GLfloat*)&args->a1, *(GLfloat*)&args->a2, *(GLfloat*)&args->a3, *(GLfloat*)&args->a4); break; case glfnUniform4fv: glUniform4fv((GLint)args->a0, (GLsizeiptr)args->a1, (GLvoid*)parg); break; case glfnUniform4i: glUniform4i((GLint)args->a0, (GLint)args->a1, (GLint)args->a2, (GLint)args->a3, (GLint)args->a4); break; case glfnUniform4iv: glUniform4iv((GLint)args->a0, (GLsizeiptr)args->a1, (GLvoid*)parg); break; case glfnUniformMatrix2fv: glUniformMatrix2fv((GLint)args->a0, (GLsizeiptr)args->a1, 0, (GLvoid*)parg); break; case glfnUniformMatrix3fv: glUniformMatrix3fv((GLint)args->a0, (GLsizeiptr)args->a1, 0, (GLvoid*)parg); break; case glfnUniformMatrix4fv: glUniformMatrix4fv((GLint)args->a0, (GLsizeiptr)args->a1, 0, (GLvoid*)parg); break; case glfnUseProgram: glUseProgram((GLint)args->a0); break; case glfnValidateProgram: glValidateProgram((GLint)args->a0); break; case glfnVertexAttrib1f: glVertexAttrib1f((GLint)args->a0, *(GLfloat*)&args->a1); break; case glfnVertexAttrib1fv: glVertexAttrib1fv((GLint)args->a0, (GLfloat*)parg); break; case glfnVertexAttrib2f: glVertexAttrib2f((GLint)args->a0, *(GLfloat*)&args->a1, *(GLfloat*)&args->a2); break; case glfnVertexAttrib2fv: glVertexAttrib2fv((GLint)args->a0, (GLfloat*)parg); break; case glfnVertexAttrib3f: glVertexAttrib3f((GLint)args->a0, *(GLfloat*)&args->a1, *(GLfloat*)&args->a2, *(GLfloat*)&args->a3); break; case glfnVertexAttrib3fv: glVertexAttrib3fv((GLint)args->a0, (GLfloat*)parg); break; case glfnVertexAttrib4f: glVertexAttrib4f((GLint)args->a0, *(GLfloat*)&args->a1, *(GLfloat*)&args->a2, *(GLfloat*)&args->a3, *(GLfloat*)&args->a4); break; case glfnVertexAttrib4fv: glVertexAttrib4fv((GLint)args->a0, (GLfloat*)parg); break; case glfnVertexAttribPointer: glVertexAttribPointer((GLuint)args->a0, (GLint)args->a1, (GLenum)args->a2, (GLboolean)args->a3, (GLsizei)args->a4, (const GLvoid*)args->a5); break; case glfnViewport: glViewport((GLint)args->a0, (GLint)args->a1, (GLint)args->a2, (GLint)args->a3); break; } return ret; }
void AttributeVariable::set(GLfloat f0_, GLfloat f1_, GLfloat f2_) { glVertexAttrib3f(_location, f0_, f1_, f2_); }
enum piglit_result piglit_display(void) { GLvoid *datap; GLint intv[] = { 1, 1, 1, 1 }; GLfloat floatv[] = { 1.0, 1.0, 1.0, 1.0 }; GLfloat quad[] = { -1.0, 1.0, 1.0, 1.0, -1.0, -1.0, 1.0, -1.0 }; GLsizei length; GLint size; GLenum type; GLchar buffer[64]; GLuint program, vShader, fShader; int maxAttribCount; /* --- valid program needed for some of the functions --- */ fShader = glCreateShader(GL_FRAGMENT_SHADER); vShader = glCreateShader(GL_VERTEX_SHADER); glShaderSource(fShader, 1, &fShaderString, NULL); glShaderSource(vShader, 1, &vShaderString, NULL); glCompileShader(vShader); glCompileShader(fShader); program = glCreateProgram(); glAttachShader(program, vShader); glAttachShader(program, fShader); glLinkProgram(program); glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &maxAttribCount); /* --- tests begin here --- */ glVertexAttrib1f(maxAttribCount, floatv[0]); CHECK_GL_INVALID_VALUE; glVertexAttrib2f(maxAttribCount, floatv[0], floatv[1]); CHECK_GL_INVALID_VALUE; glVertexAttrib3f(maxAttribCount, floatv[0], floatv[1], floatv[2]); CHECK_GL_INVALID_VALUE; glVertexAttrib4f(maxAttribCount, floatv[0], floatv[1], floatv[2], floatv[3]); CHECK_GL_INVALID_VALUE; glVertexAttrib1fv(maxAttribCount, floatv); CHECK_GL_INVALID_VALUE; glVertexAttrib2fv(maxAttribCount, floatv); CHECK_GL_INVALID_VALUE; glVertexAttrib3fv(maxAttribCount, floatv); CHECK_GL_INVALID_VALUE; glVertexAttrib4fv(maxAttribCount, floatv); CHECK_GL_INVALID_VALUE; glVertexAttribPointer(maxAttribCount, 2, GL_FLOAT, GL_FALSE, 0, quad); CHECK_GL_INVALID_VALUE; glBindAttribLocation(program, maxAttribCount, "pos"); CHECK_GL_INVALID_VALUE; glEnableVertexAttribArray(maxAttribCount); CHECK_GL_INVALID_VALUE; glDisableVertexAttribArray(maxAttribCount); CHECK_GL_INVALID_VALUE; glGetVertexAttribfv(maxAttribCount, GL_CURRENT_VERTEX_ATTRIB, floatv); CHECK_GL_INVALID_VALUE; glGetVertexAttribiv(maxAttribCount, GL_CURRENT_VERTEX_ATTRIB, intv); CHECK_GL_INVALID_VALUE; glGetVertexAttribPointerv(maxAttribCount, GL_VERTEX_ATTRIB_ARRAY_POINTER, &datap); CHECK_GL_INVALID_VALUE; glGetActiveAttrib(program, maxAttribCount, 64, &length, &size, &type, buffer); CHECK_GL_INVALID_VALUE; return PIGLIT_PASS; }
void GlShaderProgram::setAttributeVec3Float(const std::string &variableName, const float f1, const float f2, const float f3) { GLint loc = getAttributeVariableLocation(variableName); glVertexAttrib3f(loc, f1, f2, f3); }
void Shader::SetAttribute(const char* var, float v0, float v1, float v2) { int id = GetAttributeId(var); if(id >= 0) glVertexAttrib3f(id, v0, v1, v2); }
// 3 components void ShaderProgram::setAttribute(GLint index, GLfloat v1, GLfloat v2, GLfloat v3) { glVertexAttrib3f(index, v1, v2, v3); }
//-------------------------------------------------------------- void ofShader::setAttribute3f(GLint location, float v1, float v2, float v3) const{ if(bLoaded) glVertexAttrib3f(location, v1, v2, v3); }
static void ddRenderAABBs(const mat4& projview) { const ShaderInfo* shader = g_dbgdrawShader.get(); GLint posLoc = shader->m_attrs[GEOM_Pos]; GLint colorLoc = shader->m_attrs[GEOM_Color]; GLint mvpLoc = shader->m_uniforms[BIND_Mvp]; glUniformMatrix4fv(mvpLoc, 1, 0, projview.m); const ddAABB* cur = g_lists.m_aabbs; if(cur) { glBegin(GL_LINES); while(cur) { glVertexAttrib3fv(colorLoc, &cur->m_color.r); const AABB* aabb = &cur->m_aabb; // Bottom half glVertexAttrib3f(posLoc, aabb->m_min.x, aabb->m_min.y, aabb->m_min.z); glVertexAttrib3f(posLoc, aabb->m_min.x, aabb->m_min.y, aabb->m_max.z); glVertexAttrib3f(posLoc, aabb->m_min.x, aabb->m_min.y, aabb->m_max.z); glVertexAttrib3f(posLoc, aabb->m_max.x, aabb->m_min.y, aabb->m_max.z); glVertexAttrib3f(posLoc, aabb->m_max.x, aabb->m_min.y, aabb->m_max.z); glVertexAttrib3f(posLoc, aabb->m_max.x, aabb->m_min.y, aabb->m_min.z); glVertexAttrib3f(posLoc, aabb->m_max.x, aabb->m_min.y, aabb->m_min.z); glVertexAttrib3f(posLoc, aabb->m_min.x, aabb->m_min.y, aabb->m_min.z); // Top half glVertexAttrib3f(posLoc, aabb->m_min.x, aabb->m_max.y, aabb->m_min.z); glVertexAttrib3f(posLoc, aabb->m_min.x, aabb->m_max.y, aabb->m_max.z); glVertexAttrib3f(posLoc, aabb->m_min.x, aabb->m_max.y, aabb->m_max.z); glVertexAttrib3f(posLoc, aabb->m_max.x, aabb->m_max.y, aabb->m_max.z); glVertexAttrib3f(posLoc, aabb->m_max.x, aabb->m_max.y, aabb->m_max.z); glVertexAttrib3f(posLoc, aabb->m_max.x, aabb->m_max.y, aabb->m_min.z); glVertexAttrib3f(posLoc, aabb->m_max.x, aabb->m_max.y, aabb->m_min.z); glVertexAttrib3f(posLoc, aabb->m_min.x, aabb->m_max.y, aabb->m_min.z); // Connecting lines glVertexAttrib3f(posLoc, aabb->m_min.x, aabb->m_min.y, aabb->m_min.z); glVertexAttrib3f(posLoc, aabb->m_min.x, aabb->m_max.y, aabb->m_min.z); glVertexAttrib3f(posLoc, aabb->m_max.x, aabb->m_min.y, aabb->m_min.z); glVertexAttrib3f(posLoc, aabb->m_max.x, aabb->m_max.y, aabb->m_min.z); glVertexAttrib3f(posLoc, aabb->m_max.x, aabb->m_min.y, aabb->m_max.z); glVertexAttrib3f(posLoc, aabb->m_max.x, aabb->m_max.y, aabb->m_max.z); glVertexAttrib3f(posLoc, aabb->m_min.x, aabb->m_min.y, aabb->m_max.z); glVertexAttrib3f(posLoc, aabb->m_min.x, aabb->m_max.y, aabb->m_max.z); cur = cur->m_next; } glEnd(); } }