示例#1
0
int
drawsprite(struct render_buffer *rb, struct sprite *s, struct sprite_trans * ts) {
    struct sprite_trans temp;
    struct matrix temp_matrix;
    struct sprite_trans *t = sprite_trans_mul(&s->t, ts, &temp, &temp_matrix);
    switch (s->type) {
    case TYPE_PICTURE:
        return drawquad(rb, s->s.pic, t);
    case TYPE_POLYGON:
        return drawpolygon(rb, s->s.poly, t);
    case TYPE_ANIMATION: {
        struct pack_animation *ani = s->s.ani;
        int frame = s->frame % s->total_frame;
        if (frame < 0) {
            frame += s->total_frame;
        }
        frame += s->start_frame;
        struct pack_frame * pf = OFFSET_TO_POINTER(struct pack_frame, s->pack, ani->frame);
        pf = &pf[frame];
        int i;
        for (i=0; i<pf->n; i++) {
            struct pack_part *pp = OFFSET_TO_POINTER(struct pack_part, s->pack, pf->part);
            pp = &pp[i];
            int index = pp->component_id;
            struct sprite * child = s->data.children[index];
            if (child == NULL || (child->flags & SPRFLAG_INVISIBLE)) {
                continue;
            }
            struct sprite_trans temp2;
            struct matrix temp_matrix2;
            struct sprite_trans *ct = sprite_trans_mul2(s->pack, &pp->t, t, &temp2, &temp_matrix2);
            int r = drawsprite(rb, child, ct);
            if (r)
                return r;
        }
        return 0;
    }
    case TYPE_LABEL:
        if (s->data.rich_text) {
            // don't support draw label to renderbuffer
            return -1;
        }
        return 0;
    case TYPE_ANCHOR:
        if (s->data.anchor->ps) {
            return -1;
        }
        anchor_update(s, t);
        return 0;
    case TYPE_PANNEL:
        if (s->data.scissor) {
            return -1;
        } else {
            return 0;
        }
    }
    return -1;
}
示例#2
0
文件: main.c 项目: seishuku/gauges
void engine_draw_frame(void)
{
	float h2=(float)height/2.25f;

	if(display==NULL)
        return;

	if(fTime>(1.0f/20.0f))
	{
		float iTimeFull;
		PullData();

		iTimeFull=(MSDat.iTimeX*65536)+ShortSwap(MSDat.iTime);
		RPM=iTimeFull>0?(60000000*2.0f)/(iTimeFull*4):0; //0 to 8000
		CLT=cltTable[MSDat.cltADC]; //-115 to 430
		TPS=tpsTable[MSDat.tpsADC]; //-11 to 128
		BAT=(float)MSDat.batADC/255.0f*30.0f; //7 to 21
		MAP=(float)MSDat.mapADC; //0 to 255
		MAT=matTable[MSDat.matADC]; //-85 to 430
		AFR=10+(MSDat.egoADC*0.039216); //10 to 19.4
		ADV=(MSDat.advance*0.352)-10; //50 to -10

		fTime=0.0f;
	}

	glClear(GL_COLOR_BUFFER_BIT);

	glUseProgram(Objects[GLSL_GAUGE_SHADER]);
	glUniform1i(Objects[GLSL_GAUGE_TEX], 0);
	glUniform1f(Objects[GLSL_GAUGE_WIDTH], (float)width);
	glUniform1f(Objects[GLSL_GAUGE_HEIGHT], (float)height);

	glActiveTexture(GL_TEXTURE0);

	glUniform1f(Objects[GLSL_GAUGE_AMOUNT], RPM/8000.0f);
	glBindTexture(GL_TEXTURE_2D, Objects[TEXTURE_RPM]);
	drawquad(0.0f, h2, h2);

	glUniform1f(Objects[GLSL_GAUGE_AMOUNT], (CLT+40)/(250+40));
	glBindTexture(GL_TEXTURE_2D, Objects[TEXTURE_CLT]);
	drawquad(h2, h2, h2);

	glUniform1f(Objects[GLSL_GAUGE_AMOUNT], TPS/100);
	glBindTexture(GL_TEXTURE_2D, Objects[TEXTURE_TPS]);
	drawquad(h2+h2, h2, h2);

	glUniform1f(Objects[GLSL_GAUGE_AMOUNT], (BAT-7)/(21-7));
	glBindTexture(GL_TEXTURE_2D, Objects[TEXTURE_BAT]);
	drawquad(h2+h2+h2, h2, h2);

	glUniform1f(Objects[GLSL_GAUGE_AMOUNT], MAP/255.0f);
	glBindTexture(GL_TEXTURE_2D, Objects[TEXTURE_MAP]);
	drawquad(0.0f, 0.0f, h2);

	glUniform1f(Objects[GLSL_GAUGE_AMOUNT], (MAT+40)/(220+40));
	glBindTexture(GL_TEXTURE_2D, Objects[TEXTURE_MAT]);
	drawquad(h2, 0.0f, h2);

	glUniform1f(Objects[GLSL_GAUGE_AMOUNT], (AFR-10)/(19-10));
	glBindTexture(GL_TEXTURE_2D, Objects[TEXTURE_AFR]);
	drawquad(h2+h2, 0.0f, h2);

	glUniform1f(Objects[GLSL_GAUGE_AMOUNT], (ADV+10)/(50+10));
	glBindTexture(GL_TEXTURE_2D, Objects[TEXTURE_IGN]);
	drawquad(h2+h2+h2, 0.0f, h2);

	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
	glEnable(GL_BLEND);
	Font_Print(0+100, h2+75, "%0.2f", RPM);
	Font_Print(h2+100, h2+75, "%0.2f", CLT);
	Font_Print(h2+h2+100, h2+75, "%0.2f", TPS);
	Font_Print(h2+h2+h2+100, h2+75, "%0.2f", BAT);
	Font_Print(0+100, 0+75, "%0.2f", MAP);
	Font_Print(h2+100, 0+75, "%0.2f", MAT);
	Font_Print(h2+h2+100, 0+75, "%0.2f", AFR);
	Font_Print(h2+h2+h2+100, 0+75, "%0.2f", ADV);
	Font_Print(0, 0, "FPS %0.3f\n%s", FPS, MSVer);
	glDisable(GL_BLEND);

	eglSwapBuffers(display, surface);
}