void drawFrame(int buffer, long frame) { realityViewportTranslate(context, 0.0, 0.0, 0.0, 0.0); realityViewportScale(context, 1.0, 1.0, 1.0, 0.0); realityZControl(context, 0, 1, 1); // disable viewport culling // Enable alpha blending. realityBlendFunc(context, NV30_3D_BLEND_FUNC_SRC_RGB_SRC_ALPHA | NV30_3D_BLEND_FUNC_SRC_ALPHA_SRC_ALPHA, NV30_3D_BLEND_FUNC_DST_RGB_ONE_MINUS_SRC_ALPHA | NV30_3D_BLEND_FUNC_DST_ALPHA_ZERO); realityBlendEquation(context, NV40_3D_BLEND_EQUATION_RGB_FUNC_ADD | NV40_3D_BLEND_EQUATION_ALPHA_FUNC_ADD); realityBlendEnable(context, 1); realityViewport(context, res.width, res.height); setupRenderTarget(buffer); // set the clear color realitySetClearColor(context, 0x00000000); // Black, because it looks cool // and the depth clear value realitySetClearDepthValue(context, 0xffff); // Clear the buffers realityClearBuffers(context, REALITY_CLEAR_BUFFERS_COLOR_R | REALITY_CLEAR_BUFFERS_COLOR_G | REALITY_CLEAR_BUFFERS_COLOR_B | NV30_3D_CLEAR_BUFFERS_COLOR_A | NV30_3D_CLEAR_BUFFERS_STENCIL | REALITY_CLEAR_BUFFERS_DEPTH); // Load shaders, because the rsx won't do anything without them. realityLoadVertexProgram(context, &nv40_vp); realityLoadFragmentProgram(context, &nv30_fp); // Load texture load_tex(0, tx_offset, dice.width, dice.height, dice.width*4, NV40_3D_TEX_FORMAT_FORMAT_A8R8G8B8, 1); // Generate quad realityVertexBegin(context, REALITY_QUADS); { realityTexCoord2f(context, 0.0, 0.0); realityVertex4f(context, 600.0, 300.0, 0.0, 1.0); realityTexCoord2f(context, 1.0, 0.0); realityVertex4f(context, 1400.0, 300.0, 0.0, 1.0); realityTexCoord2f(context, 1.0, 1.0); realityVertex4f(context, 1400.0, 900.0, 0.0, 1.0); realityTexCoord2f(context, 0.0, 1.0); realityVertex4f(context, 600.0, 900.0, 0.0, 1.0); } realityVertexEnd(context); }
void rsx_set_fp(glw_root_t *root, rsx_fp_t *rfp, int force) { if(root->gr_be.be_fp_current == rfp && !force) return; root->gr_be.be_fp_current = rfp; realityLoadFragmentProgram(root->gr_be.be_ctx, rfp->rfp_binary, rfp->rfp_rsx_location, 0); }