void drawContext::drawPView(PView *p) { PViewOptions *opt = p->getOptions(); if(!opt->visible) return; glPointSize((GLfloat)opt->pointSize); glLineWidth((GLfloat)opt->lineWidth); drawArray(p->va_points, GL_POINTS, true); drawArray(p->va_lines, GL_LINES, true); drawArray(p->va_triangles, GL_TRIANGLES, true, true); glLineWidth(1); glPointSize(1); drawVectorArray(p->getOptions(), p->va_vectors); }
void PlotFunction::drawArray(float* energyArray, int minIndex, int maxIndex, const WindowRegion& window, const double& maxResolution){ minIndex = max(0, minIndex); // maxIndex = min((int)sizeof(energyArray)-1, maxIndex); int tmpStepVal = 100; double maximumValue = 1; if (maxIndex > minIndex) maximumValue = getMaximumArray(energyArray, minIndex, maxIndex, tmpStepVal); drawArray(energyArray, minIndex, maxIndex, window, maxResolution, maximumValue); }
static void blendOverlay(ObjLoader *ovl, mat4 m, float t) { vec4 pos[100]; for (unsigned i = 0; i < ovl->getCount(); i++) { vec4 pos3D = m * vec4(ovl->getVerts3fv()[i], 1); vec2 uv = ovl->getUVs2fv()[i]; vec4 pos2D = vec4(uv.x * 2 - 1, uv.y * 2 - 1, -1, 1); pos[i] = mix(pos3D, pos2D, t); } drawArray(GL_TRIANGLES, value_ptr(pos[0]), NULL, ovl->getUVs(), NULL, NULL, ovl->getCount(), 1, 4); }
void gDrawCircle(GContext *context) { Program *prog = context->programs.circle; glUseProgram(prog->id); { setVectorUniforms(prog,context->translation,context->modelview_matrix,context->projection_matrix); setColorUniform(prog,context->color); drawArray(context, prog); } glUseProgram(0); #ifdef DEBUG checkError(); #endif }
void gFill(GContext *context) { Program *prog = context->programs.fill; glUseProgram(prog->id); { setVectorUniforms(prog,NULLVEC,UNIMAT,UNIMAT); setColorUniform(prog,context->color); drawArray(context, prog); } glUseProgram(0); #ifdef DEBUG checkError(); #endif }
void gDrawRing(GContext *context, float in) { Program *prog = context->programs.ring; glUseProgram(prog->id); { setVectorUniforms(prog,context->translation,context->modelview_matrix,context->projection_matrix); setColorUniform(prog,context->color); glUniform1fv(getUniform(prog,U_INNER_MUL), 1, &in); drawArray(context, prog); } glUseProgram(0); #ifdef DEBUG checkError(); #endif }
void channelDisplay::draw(ofTrueTypeFont * font) { ofPushMatrix(); ofTranslate(x,y,0); ofSetColor(0,0,0); font->drawString(name, 0,7); ofPopMatrix(); if(_show) { drawArray(); } for(int i=0; i<buttons.size(); i++) { buttons[i].draw(font); } }
void draw() { switch (currentMode) { case 1: drawArray(); break; case 2: drawArray2D(); break; case 3: drawModules(); break; } }
void gDrawImage(GContext *context, GImage *image) { Program *prog = context->programs.tex; glUseProgram(prog->id); { setVectorUniforms(prog,context->translation,context->modelview_matrix,context->projection_matrix); setColorUniform(prog,context->color); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, image->_id); glUniform1i(getUniform(prog,U_TEXTURE),0); drawArray(context, prog); } glUseProgram(0); #ifdef DEBUG checkError(); #endif }
void tveVertexArray::render(float y, int dir) { glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); //first pass glClientActiveTextureARB(GL_TEXTURE0_ARB); glTexCoordPointer(2, GL_FLOAT, 0, tex_coord[0]); glActiveTextureARB(GL_TEXTURE0_ARB); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, height_map->tex[SHADOW]); glClientActiveTextureARB(GL_TEXTURE1_ARB); glTexCoordPointer(2, GL_FLOAT, 0, tex_coord[1]); glActiveTextureARB(GL_TEXTURE1_ARB); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, height_map->tex[GRASS]); glVertexPointer(3, GL_FLOAT, 0, vertices); //TODO if (top->lock) glLockArraysEXT(0, (LEAF_GRANULARITY+1)*(LEAF_GRANULARITY+1)); drawArray(dir); // prepare second and third pass glEnableClientState(GL_COLOR_ARRAY); glClientActiveTextureARB(GL_TEXTURE0_ARB); glTexCoordPointer(2, GL_FLOAT, 0, tex_coord[1]); glActiveTextureARB(GL_TEXTURE1_ARB); glDisable(GL_TEXTURE_2D); glActiveTextureARB(GL_TEXTURE0_ARB); glDepthMask(0); //second pass //TODO if (y > 128.0f) { glColorPointer(4, GL_UNSIGNED_BYTE, 0, color[0]); glBindTexture(GL_TEXTURE_2D, height_map->tex[SNOW]); drawArray(dir); } //third pass glColorPointer(4, GL_UNSIGNED_BYTE, 0, color[1]); glBindTexture(GL_TEXTURE_2D, height_map->tex[ROCK]); drawArray(dir); glDisableClientState(GL_COLOR_ARRAY); //fourth pass if (tveVoyager::cv_posy->value.floating < tveVoyager::cv_water->value.floating) { glColor4f(1.0f, 1.0f, 1.0f, 0.1f); glBindTexture(GL_TEXTURE_2D, top->cur_water_tex); drawArray(dir); } glDepthMask(1); //FIXME: I don't know why I need to put that line before disabling TEXTURE_COORD in // order to run perfectly on GeForce 2 Ultra under Linux with driver 0.9.767 glClientActiveTextureARB(GL_TEXTURE1_ARB); if (top->lock) glUnlockArraysEXT(); glDisableClientState(GL_TEXTURE_COORD_ARRAY); glDisableClientState(GL_VERTEX_ARRAY); }
void CubewallScene::_draw(float time) { int textBitmapWidthL = min(textBitmapWidth, (int)(time*30.f)); time -= SceneTime::outStorm2cubewall; float fadeIn = min(1.0f, 1.f+time*0.33f); bool fadeActive = (fadeIn < 1.0); if (!fadeActive) { fboOverlay->bind(); } float fade2 = max(0.f, min(1.f, time)); setBlendMode(NO_BLEND); setCullMode(NO_CULL); setDepthMode(NO_DEPTH); glClearDepth(1.0f); glClearColor(56.f/256.f * fade2, 60.f/256.f * fade2, 50.f/256.f * fade2, 1.0f); glClear((fadeActive ? 0 : GL_COLOR_BUFFER_BIT) | GL_DEPTH_BUFFER_BIT); float ctime = max(0.f, time); int cctime = clamp((int)(gMusic->getBeat() / 16) - int(SceneTime::cubewallStart / BEAT / 16), 0, 6); //6 Teile,Schluß vec3 eye(-1.5*((cctime & 2) ? -1.f : 1.f), 0.5, (cctime & 1) ? 1. : (2. + 0.95*cos(ctime*0.2) + ctime*ctime*0.005)); vec3 center(0, -0.1 + 0.2*sin(time*0.15) + 0.5*atan(time*0.1), 0); vec3 up(0, 1, 0); mat4 view = lookAt(eye, center, up); mat4 proj = perspective<float>(30.f + 10.f*(float)cos(time*0.1), demo.aspect, 0.001f, 100.f); mat4 projView = proj*view; floorClearShader->bind(); setBlendMode(BLEND_ALPHA); floorClearShader->uniform("u_fade", fadeIn); floorClearShader->uniform("u_matrix", projView); drawArray(GL_TRIANGLE_FAN, floorVerts, NULL, NULL, NULL, NULL, sizeof(floorVerts) / (3 * sizeof(float))); floorClearShader->unbind(); setDepthMode(DEPTH_FULL); setBlendMode(NO_BLEND); cubeShader->bind(); cubeShader->uniform("u_eye", eye); cubeShader->uniform("u_matrix", projView); float cubeScaleFade = clamp((Duration() - time - 4.0f) / 1.0f, 0.0f, 1.0f); //ab 179: Kötzchen weg float explosionTime = max(0.f, time - (179.f - SceneTime::cubewallStart)); float explosionY = explosionTime*explosionTime; float cubeScale = 16.f / (float)textBitmapWidth; int cubeInstanceIndex = 0; for (int x = 0; x < textBitmapWidthL; x++) { for (int y = 0; y < textBitmapHeight; y++) { int cubeIndex = ((textBitmapHeight - 1) - y)*textBitmapWidth + x; int pixelPos = cubeIndex * 4; int a = textBitmap[pixelPos + 3]; if (a == 0) continue; float r = (textBitmap[pixelPos] * a) * (1.f/(255.f*255.f)); float g = (textBitmap[pixelPos+1] * a) * (1.f/(255.f*255.f)); float b = (textBitmap[pixelPos+2] * a) * (1.f/(255.f*255.f)); float random = randomValues[cubeIndex]; float cubeShiftAmp = 1.f - fract(gMusic->getBeat());// fmod(time * 2 * 1.2f, 1.f); float cubeShift = (0.5f - random) * cubeShiftAmp * 2; vec4 color(r, g, b, 1.f); color *= (1. - (0.5*cubeShift) + cubeShift*random); float highlightRandom = randomValues[((textBitmapHeight - 1) - y)*textBitmapWidth + (x / 3 + (int)(gMusic->getBeat() / 4)) % (textBitmapWidth*textBitmapHeight)]; float highlight = pow(highlightRandom, 10) * 10; color *= 1. + highlight; for (int mirror = 0; mirror < 2; mirror++) { vec3 pos(x*cubeScale + time*-0.65f + 1.5f, (y*cubeScale + 0.05f) * (mirror ? -1 : 1), cubeShift*0.5f*cubeScale); pos.y -= explosionY*(1.f+0.1f*random); pos.x += explosionTime*sin(10.f*random); cubePosScale[cubeInstanceIndex] = vec4(pos, cubeScaleFade * 0.4f*cubeScale); cubeCol [cubeInstanceIndex] = color; cubeInstanceIndex++; if (cubeInstanceIndex == 510) //TODO: allokierter Buffer für alle Werte statt der nur 1024 Konstanten-Register { cubeShader->uniform("u_posScale", cubePosScale, cubeInstanceIndex); cubeShader->uniform("u_color", cubeCol, cubeInstanceIndex); drawArray(GL_TRIANGLE_STRIP, semicube, NULL, NULL, NULL, NULL, sizeof(semicube) / (3 * sizeof(float)), cubeInstanceIndex); cubeInstanceIndex = 0; } } } } cubeShader->uniform("u_posScale", cubePosScale, cubeInstanceIndex); cubeShader->uniform("u_color", cubeCol, cubeInstanceIndex); drawArray(GL_TRIANGLE_STRIP, semicube, NULL, NULL, NULL, NULL, sizeof(semicube) / (3 * sizeof(float)), cubeInstanceIndex); cubeShader->unbind(); floorShader->bind(); setBlendMode(BLEND_ALPHA); floorShader->uniform("u_eye", eye); floorShader->uniform("u_matrix", projView); floorShader->uniform("u_fade", fadeIn); drawArray(GL_TRIANGLE_FAN, floorVerts, NULL, NULL, NULL, NULL, sizeof(floorVerts) / (3 * sizeof(float))); floorShader->unbind(); if (!fadeActive) { fboOverlay->unbind(); setBlendMode(NO_BLEND); setCullMode(NO_CULL); setDepthMode(NO_DEPTH); kratzerShader->bind(); kratzerShader->bindFbo("src", fboOverlay, 0); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT); kratzerShader->bindTexture("tex", kratzer, 1); kratzerShader->uniform("u_fade", fade2); drawFullscreenQuad(); kratzerShader->unbind(); } setDepthMode(NO_DEPTH); setBlendMode(BLEND_ALPHA); setCullMode(NO_CULL); if (fadeIn >= 1.0f) { float creditsStart = 3.f; float creditsDuration = (SceneTime::lazorsStart - SceneTime::cubewallStart) - creditsStart; float creditTime = (time - creditsStart - 1.f) * 3.f / creditsDuration; float pos = floor(creditTime); creditsShader->bind(); creditsShader->bindTexture("tex", credits, 0); creditsShader->uniform("fade", 2 * (creditTime - pos)); drawRect(vec2(-1, -1 + 0.1185), vec2(1, -1 + 2 * 0.1185), vec2(0, (1. / 3.)*(pos + 1)), vec2(1, (1. / 3.)*pos)); creditsShader->unbind(); } }
void Plotter::drawTrace(Trace* trace, int index1, int index2){ drawArray(trace->getData(), index1, index2); }