void ScreenFX::CreateImmediateModeData(RwCamera *cam, RwRect *rect) { float zero = 0.0f; float xmax = rect->w; float ymax = rect->h; // whatever this is... if(RwRasterGetDepth(RwCameraGetRaster(cam)) == 16){ zero += 0.5f; xmax += 0.5f; ymax += 0.5f; }else{ zero -= 0.5f; xmax -= 0.5f; ymax -= 0.5f; } const float recipz = 1.0f/RwCameraGetNearClipPlane(cam); RwIm2DVertexSetScreenX(&screenVertices[0], zero); RwIm2DVertexSetScreenY(&screenVertices[0], zero); RwIm2DVertexSetScreenZ(&screenVertices[0], RwIm2DGetNearScreenZ()); RwIm2DVertexSetRecipCameraZ(&screenVertices[0], recipz); RwIm2DVertexSetU(&screenVertices[0], 0.0f, recipz); RwIm2DVertexSetV(&screenVertices[0], 0.0f, recipz); RwIm2DVertexSetIntRGBA(&screenVertices[0], 255, 255, 255, 255); RwIm2DVertexSetScreenX(&screenVertices[1], zero); RwIm2DVertexSetScreenY(&screenVertices[1], ymax); RwIm2DVertexSetScreenZ(&screenVertices[1], RwIm2DGetNearScreenZ()); RwIm2DVertexSetRecipCameraZ(&screenVertices[1], recipz); RwIm2DVertexSetU(&screenVertices[1], 0.0f, recipz); RwIm2DVertexSetV(&screenVertices[1], 1.0f, recipz); RwIm2DVertexSetIntRGBA(&screenVertices[1], 255, 255, 255, 255); RwIm2DVertexSetScreenX(&screenVertices[2], xmax); RwIm2DVertexSetScreenY(&screenVertices[2], ymax); RwIm2DVertexSetScreenZ(&screenVertices[2], RwIm2DGetNearScreenZ()); RwIm2DVertexSetRecipCameraZ(&screenVertices[2], recipz); RwIm2DVertexSetU(&screenVertices[2], 1.0f, recipz); RwIm2DVertexSetV(&screenVertices[2], 1.0f, recipz); RwIm2DVertexSetIntRGBA(&screenVertices[2], 255, 255, 255, 255); RwIm2DVertexSetScreenX(&screenVertices[3], xmax); RwIm2DVertexSetScreenY(&screenVertices[3], zero); RwIm2DVertexSetScreenZ(&screenVertices[3], RwIm2DGetNearScreenZ()); RwIm2DVertexSetRecipCameraZ(&screenVertices[3], recipz); RwIm2DVertexSetU(&screenVertices[3], 1.0f, recipz); RwIm2DVertexSetV(&screenVertices[3], 0.0f, recipz); RwIm2DVertexSetIntRGBA(&screenVertices[3], 255, 255, 255, 255); }
void DrawLine(CVector2D const&a, CVector2D const&b, float width, unsigned int color) { CVector2D point[4], shift[2], dir; width /= 2.0; dir.x = b.x - a.x; dir.y = b.y - a.y; float angle = atan2(dir.y, dir.x); shift[0].x = cos(angle - 1.5707963f) * width; shift[0].y = sin(angle - 1.5707963f) * width; shift[1].x = cos(angle + 1.5707963f) * width; shift[1].y = sin(angle + 1.5707963f) * width; point[0].x = a.x + shift[1].x; point[0].y = a.y + shift[1].y; point[1].x = b.x + shift[1].x; point[1].y = b.y + shift[1].y; point[2].x = a.x + shift[0].x; point[2].y = a.y + shift[0].y; point[3].x = b.x + shift[0].x; point[3].y = b.y + shift[0].y; float oldZ = RwIm2DGetNearScreenZ(); RwIm2DSetNearScreenZ(oldZ + *gRadarMapZShift); SetSpriteVertices(point[0].x, point[0].y, point[1].x, point[1].y, point[2].x, point[2].y, point[3].x, point[3].y, &color, &color, &color, &color); RwIm2DSetNearScreenZ(oldZ); RwIm2DRenderPrimitive(rwPRIMTYPETRIFAN, gSpriteVertices, 4); }
static void MakeScreenQuad(void) { int width = reflectionTex->raster->width; int height = reflectionTex->raster->height; screenQuad[0].x = 0.0f; screenQuad[0].y = 0.0f; screenQuad[0].z = RwIm2DGetNearScreenZ(); screenQuad[0].rhw = 1.0f / reflectionCam->nearPlane; screenQuad[0].emissiveColor = 0xFFFFFFFF; screenQuad[1].x = 0.0f; screenQuad[1].y = height; screenQuad[1].z = screenQuad[0].z; screenQuad[1].rhw = screenQuad[0].rhw; screenQuad[1].emissiveColor = 0xFFFFFFFF; screenQuad[2].x = width; screenQuad[2].y = height; screenQuad[2].z = screenQuad[0].z; screenQuad[2].rhw = screenQuad[0].rhw; screenQuad[2].emissiveColor = 0xFFFFFFFF; screenQuad[3].x = width; screenQuad[3].y = 0; screenQuad[3].z = screenQuad[0].z; screenQuad[3].rhw = screenQuad[0].rhw; screenQuad[3].emissiveColor = 0xFFFFFFFF; MakeQuadTexCoords(true); }
static void AddCorona(float x, float y, float sz) { float nearz, recipz; RwIm2DVertex *v; nearz = RwIm2DGetNearScreenZ(); recipz = 1.0f / RwCameraGetNearClipPlane((RwCamera*)RWSRCGLOBAL(curCamera)); v = &coronaVerts[numCoronaVerts]; RwIm2DVertexSetScreenX(&v[0], x); RwIm2DVertexSetScreenY(&v[0], y); RwIm2DVertexSetScreenZ(&v[0], nearz); RwIm2DVertexSetRecipCameraZ(&v[0], recipz); RwIm2DVertexSetU(&v[0], 0.0f, recipz); RwIm2DVertexSetV(&v[0], 0.0f, recipz); RwIm2DVertexSetIntRGBA(&v[0], 0xFF, 0xFF, 0xFF, 0xFF); RwIm2DVertexSetScreenX(&v[1], x); RwIm2DVertexSetScreenY(&v[1], y + sz); RwIm2DVertexSetScreenZ(&v[1], nearz); RwIm2DVertexSetRecipCameraZ(&v[1], recipz); RwIm2DVertexSetU(&v[1], 0.0f, recipz); RwIm2DVertexSetV(&v[1], 1.0f, recipz); RwIm2DVertexSetIntRGBA(&v[1], 0xFF, 0xFF, 0xFF, 0xFF); RwIm2DVertexSetScreenX(&v[2], x + sz); RwIm2DVertexSetScreenY(&v[2], y + sz); RwIm2DVertexSetScreenZ(&v[2], nearz); RwIm2DVertexSetRecipCameraZ(&v[2], recipz); RwIm2DVertexSetU(&v[2], 1.0f, recipz); RwIm2DVertexSetV(&v[2], 1.0f, recipz); RwIm2DVertexSetIntRGBA(&v[2], 0xFF, 0xFF, 0xFF, 0xFF); RwIm2DVertexSetScreenX(&v[3], x + sz); RwIm2DVertexSetScreenY(&v[3], y); RwIm2DVertexSetScreenZ(&v[3], nearz); RwIm2DVertexSetRecipCameraZ(&v[3], recipz); RwIm2DVertexSetU(&v[3], 1.0f, recipz); RwIm2DVertexSetV(&v[3], 0.0f, recipz); RwIm2DVertexSetIntRGBA(&v[3], 0xFF, 0xFF, 0xFF, 0xFF); coronaIndices[numCoronaIndices++] = numCoronaVerts; coronaIndices[numCoronaIndices++] = numCoronaVerts + 1; coronaIndices[numCoronaIndices++] = numCoronaVerts + 2; coronaIndices[numCoronaIndices++] = numCoronaVerts; coronaIndices[numCoronaIndices++] = numCoronaVerts + 2; coronaIndices[numCoronaIndices++] = numCoronaVerts + 3; numCoronaVerts += 4; }