Exemple #1
0
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);
}
Exemple #3
0
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);
}
Exemple #4
0
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
}
Exemple #5
0
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
}
Exemple #6
0
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);
	}
}
Exemple #8
0
void draw()
{
	switch (currentMode)
	{
	case 1:
		drawArray();
		break;

	case 2:
		drawArray2D();
		break;

	case 3:
		drawModules();
		break;
	}
}
Exemple #9
0
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);
}
Exemple #11
0
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();
	}
}
Exemple #12
0
void Plotter::drawTrace(Trace* trace, int index1, int index2){
    drawArray(trace->getData(), index1, index2);
}