本文整理汇总了C++中VertexArray::sendToPipeline方法的典型用法代码示例。如果您正苦于以下问题:C++ VertexArray::sendToPipeline方法的具体用法?C++ VertexArray::sendToPipeline怎么用?C++ VertexArray::sendToPipeline使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类VertexArray
的用法示例。
在下文中一共展示了VertexArray::sendToPipeline方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: draw
void draw()
{
static int counter = 0;
counter++;
if (naive)
{
glClearDepth(1.0);
glClearColor(1.0, 1.0, 1.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}
else
{
glClearDepth(0.0);
fb->attachDepth(tex_depth[0]);
fb->on();
glClear(GL_DEPTH_BUFFER_BIT);
fb->off();
glClearDepth(1.0);
glEnable(GL_BLEND);
glClearColor(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_BLEND);
}
Program *p = NULL;
p = pgmPhong;
p->setUniform("MV",
translate(mat4(),vec3(0.0f,0.0f,-20.0f)) *
mat4(getRotation()) *
scale(mat4(),vec3(1/maxdim)) *
translate(mat4(),vec3(-center[0],-center[1],-center[2]))
);
p->setUniform("NM",getRotation());
p->setUniform("P",perspective(getZoom(),getAspectRatio(),18.0f,22.0f));
p->setUniform("lloc",vec3(0.0,0.0,1.0));
p->setUniform("kd",vec3(0.5,0.7,0.9));
p->setUniform("ka",vec3(0.5,0.7,0.9));
p->setUniform("ks",vec3(0.3,0.3,0.3));
p->setUniform("I",vec3(0.8,0.8,0.8));
p->setUniform("Ia",vec3(0.2,0.2,0.2));
p->setUniform("nspec",1000.0f);
p->setUniform("reor",reor);
if (naive)
{
glDisable(GL_DEPTH_TEST);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
p->setUniform("dfilter",0);
p->on();
vaGouraudPhong->sendToPipelineIndexed(GL_TRIANGLES,ix,0,3*ts);
p->off();
glDisable(GL_BLEND);
return;
}
int i;
p->setUniform("dfilter",1);
for ( i=0; ; i++ )
{
glDisable(GL_BLEND);
glEnable(GL_DEPTH_TEST);
fb->attachDepth(tex_depth[(i+1)%2]);
tex_depth[i%2]->bind(0);
// tex_depth is currently bound to GL_TEXTURE_2D; the binding occurs in the bind() method
// below, additional paramteters are set for that texture
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_COMPARE_MODE,GL_COMPARE_REF_TO_TEXTURE);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_COMPARE_FUNC,GL_LEQUAL);
p->on();
fb->on();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBeginQuery(GL_SAMPLES_PASSED,query);
vaGouraudPhong->sendToPipelineIndexed(GL_TRIANGLES,ix,0,3*ts);
glEndQuery(GL_SAMPLES_PASSED);
p->off();
fb->off();
do {
GLint val;
glGetQueryObjectiv(query,GL_QUERY_RESULT_AVAILABLE,&val);
if (val==GL_TRUE)
break;
} while(1);
GLint pixels;
glGetQueryObjectiv(query,GL_QUERY_RESULT,&pixels);
if (counter%100==0) cout << ((i==0) ? "\n" : "") << "Fragments rendered into layer " << i << ": " << pixels << endl;
if (pixels==0)
{
pgmQuad->setUniform("white",1);
//.........这里部分代码省略.........
示例2: draw
void draw()
{
// clear the WINDOW
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// set up culling...
if (reor>0)
glCullFace(GL_BACK);
else
glCullFace(GL_FRONT);
// modelview and projection matrices are as always...
mat4 ModelView = translate(mat4(),vec3(0.0f,0.0f,-20.0f)) *
mat4(getRotation()) *
scale(mat4(),vec3(1/maxdim)) *
translate(mat4(),-center);
mat4 Projection = perspective(getZoom(),getAspectRatio(),18.0f,22.0f);
// so are all uniform variables for the Phong program...
pgmPhong->setUniform("MV",ModelView);
pgmPhong->setUniform("P",Projection);
pgmPhong->setUniform("NM",getRotation());
pgmPhong->setUniform("lloc",lloc);
pgmPhong->setUniform("kd",vec3(0.5,0.7,0.9));
pgmPhong->setUniform("ka",vec3(0.5,0.7,0.9));
pgmPhong->setUniform("ks",vec3(0.3,0.3,0.3));
/* pgmPhong->setUniform("I",vec3(0.8,0.8,0.8)); */
/* pgmPhong->setUniform("Ia",vec3(0.2,0.2,0.2)); */
pgmPhong->setUniform("nspec",1000.0f);
pgmPhong->setUniform("reor",reor);
// Here, we render into our frame buffer.
fb->on(); // Turn on the framebuffer; Until it is turned off, the framebuffer will be used as
// the rendering target.
glViewport(0,0,texsize,texsize); // The framebuffer has a different resolution than the
// window. This changes the viewport transformation to
// scaling [-1,1]x[-1,1] (normalized coordinates, after modelview and projection transformations)
// --> [0,texsize]x[0,texsize]
pgmPhong->on(); // turn the Phong program on
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // this applies to currently active framebuffer!
vaPhong->sendToPipelineIndexed(GL_TRIANGLES,ix,0,3*ts); // render the mesh as usual
pgmPhong->off(); // turn the program off
fb->off(); // turn the framebuffer off; currently active framebuffer = our window
// Here, we render the texture into the GLUT window
glCullFace(GL_BACK); // the square is oriented CCW
if (nearestInterpolation) {
tcol->nearest();
tdepth->nearest();
} else {
tcol->linear();
tdepth->linear();
}
tcol->bind(1); // bind the texture to attachment point #1; use small numbers as TAP IDs!
tdepth->bind(2); // bind the texture to attachment point #1; use small numbers as TAP IDs!
// resolution of the framebuffer has changes, so the viewport transform needs to be
// updated; we need scaling [-1,1]^2 ---> [0,width of window] x [0, height of window]
glViewport(0,0,getWindowWidth(),getWindowHeight());
// render the square; see how the square shaders use the texture...
pgmSquare->on();
pgmSquare->setUniform("xo", (float)1.0 / ((float) getWindowWidth()));
pgmSquare->setUniform("yo", (float)1.0 / ((float) getWindowHeight()));
vaSquare->sendToPipeline(GL_TRIANGLE_STRIP,0,4); // send 4 vertices
pgmSquare->off();
}