static void pre_render() { Xe_SetAlphaTestEnable(g_pVideoDevice, 1); Xe_SetCullMode(g_pVideoDevice, XE_CULL_NONE); Xe_InvalidateState(g_pVideoDevice); Xe_SetShader(g_pVideoDevice, SHADER_TYPE_PIXEL, g_pPixelTexturedShader, 0); Xe_SetShader(g_pVideoDevice, SHADER_TYPE_VERTEX, g_pVertexShader, 0); //Xe_SetFillMode(g_pVideoDevice,0x25,0x25); nb_vertices = 0; }
static void pre_render() { //while (!Xe_IsVBlank(g_pVideoDevice)); // sync before drawing Xe_Sync(g_pVideoDevice); Xe_InvalidateState(g_pVideoDevice); Xe_SetAlphaTestEnable(g_pVideoDevice, 1); Xe_SetCullMode(g_pVideoDevice, XE_CULL_NONE); nb_vertices = 0; }
static void draw_quad(render_primitive *prim) { void * texture = (prim->texture.base); //void Xe_SetBlendControl(struct XenosDevice *xe, int col_src, int col_op, int col_dst, int alpha_src, int alpha_op, int alpha_dst); switch (PRIMFLAG_GET_BLENDMODE(prim->flags)) { case BLENDMODE_NONE: Xe_SetAlphaTestEnable(g_pVideoDevice,0); Xe_SetBlendOp(g_pVideoDevice, XE_BLENDOP_ADD); Xe_SetSrcBlend(g_pVideoDevice, XE_BLEND_SRCALPHA); Xe_SetDestBlend(g_pVideoDevice, XE_BLEND_INVSRCALPHA); break; case BLENDMODE_ALPHA: Xe_SetAlphaTestEnable(g_pVideoDevice,1); Xe_SetBlendOp(g_pVideoDevice, XE_BLENDOP_ADD); Xe_SetSrcBlend(g_pVideoDevice, XE_BLEND_SRCALPHA); Xe_SetDestBlend(g_pVideoDevice, XE_BLEND_INVSRCALPHA); break; case BLENDMODE_RGB_MULTIPLY: Xe_SetAlphaTestEnable(g_pVideoDevice,1); Xe_SetBlendOp(g_pVideoDevice, XE_BLENDOP_ADD); Xe_SetSrcBlend(g_pVideoDevice, XE_BLEND_DESTCOLOR); Xe_SetDestBlend(g_pVideoDevice, XE_BLEND_ZERO); break; case BLENDMODE_ADD: Xe_SetAlphaTestEnable(g_pVideoDevice,1); Xe_SetBlendOp(g_pVideoDevice, XE_BLENDOP_ADD); Xe_SetSrcBlend(g_pVideoDevice, XE_BLEND_SRCALPHA); Xe_SetDestBlend(g_pVideoDevice, XE_BLEND_ONE); break; } DrawVerticeFormats *vertex = (DrawVerticeFormats *) Xe_VB_Lock(g_pVideoDevice, vb, nb_vertices, 3 * sizeof (DrawVerticeFormats), XE_LOCK_WRITE); memset(vertex, 0, 3 * sizeof (DrawVerticeFormats)); { vertex[0].x = prim->bounds.x0 - 0.5f; vertex[0].y = prim->bounds.y0 - 0.5f; vertex[1].x = prim->bounds.x1 - 0.5f; vertex[1].y = prim->bounds.y0 - 0.5f; vertex[2].x = prim->bounds.x0 - 0.5f; vertex[2].y = prim->bounds.y1 - 0.5f; vertex[3].x = prim->bounds.x1 - 0.5f; vertex[3].y = prim->bounds.y1 - 0.5f; // set the texture coordinates if (texture != NULL) { vertex[0].u = prim->texcoords.tl.u; vertex[0].v = prim->texcoords.tl.v; vertex[1].u = prim->texcoords.tr.u; vertex[1].v = prim->texcoords.tr.v; vertex[2].u = prim->texcoords.bl.u; vertex[2].v = prim->texcoords.bl.v; vertex[3].u = prim->texcoords.br.u; vertex[3].v = prim->texcoords.br.v; n++; } XeColor color; color.r = (prim->color.r * 255.0f); color.g = (prim->color.g * 255.0f); color.b = (prim->color.b * 255.0f); color.a = (prim->color.a * 255.0f); int i = 0; for (i = 0; i < 3; i++) { vertex[i].z = 0.0; vertex[i].w = 1.0; } } Xe_VB_Unlock(g_pVideoDevice, vb); Xe_SetStreamSource(g_pVideoDevice, 0, vb, nb_vertices, sizeof (DrawVerticeFormats)); Xe_DrawPrimitive(g_pVideoDevice, XE_PRIMTYPE_RECTLIST, 0, 1); nb_vertices += 256; }