mirror of https://github.com/aap/librw.git
some im2d
This commit is contained in:
parent
b63c3ea3b4
commit
aa627a8f2c
|
@ -64,7 +64,7 @@ struct Im3DVertex
|
||||||
struct Im2DVertex
|
struct Im2DVertex
|
||||||
{
|
{
|
||||||
float32 x, y, z;
|
float32 x, y, z;
|
||||||
float32 w;
|
float32 q;
|
||||||
uint32 color;
|
uint32 color;
|
||||||
float32 u, v;
|
float32 u, v;
|
||||||
|
|
||||||
|
@ -72,7 +72,7 @@ struct Im2DVertex
|
||||||
void setScreenY(float32 y) { this->y = y; }
|
void setScreenY(float32 y) { this->y = y; }
|
||||||
void setScreenZ(float32 z) { this->z = z; }
|
void setScreenZ(float32 z) { this->z = z; }
|
||||||
void setCameraZ(float32 z) { }
|
void setCameraZ(float32 z) { }
|
||||||
void setRecipCameraZ(float32 recipz) { this->w = recipz; }
|
void setRecipCameraZ(float32 recipz) { this->q = recipz; }
|
||||||
void setColor(uint8 r, uint8 g, uint8 b, uint8 a) { this->color = COLOR_ARGB(a, r, g, b); }
|
void setColor(uint8 r, uint8 g, uint8 b, uint8 a) { this->color = COLOR_ARGB(a, r, g, b); }
|
||||||
void setU(float32 u, float recipZ) { this->u = u; }
|
void setU(float32 u, float recipZ) { this->u = u; }
|
||||||
void setV(float32 v, float recipZ) { this->v = v; }
|
void setV(float32 v, float recipZ) { this->v = v; }
|
||||||
|
@ -80,7 +80,8 @@ struct Im2DVertex
|
||||||
float getScreenX(void) { return this->x; }
|
float getScreenX(void) { return this->x; }
|
||||||
float getScreenY(void) { return this->y; }
|
float getScreenY(void) { return this->y; }
|
||||||
float getScreenZ(void) { return this->z; }
|
float getScreenZ(void) { return this->z; }
|
||||||
float getCameraZ(void) { return this->w; }
|
float getCameraZ(void) { return 1.0f/this->q; }
|
||||||
|
float getRecipCameraZ(void) { return this->q; }
|
||||||
RGBA getColor(void) { return makeRGBA(this->color>>16 & 0xFF, this->color>>8 & 0xFF,
|
RGBA getColor(void) { return makeRGBA(this->color>>16 & 0xFF, this->color>>8 & 0xFF,
|
||||||
this->color & 0xFF, this->color>>24 & 0xFF); }
|
this->color & 0xFF, this->color>>24 & 0xFF); }
|
||||||
float getU(void) { return this->u; }
|
float getU(void) { return this->u; }
|
||||||
|
|
|
@ -143,6 +143,7 @@ struct Im2DVertex
|
||||||
float getScreenY(void) { return this->y; }
|
float getScreenY(void) { return this->y; }
|
||||||
float getScreenZ(void) { return this->z; }
|
float getScreenZ(void) { return this->z; }
|
||||||
float getCameraZ(void) { return this->w; }
|
float getCameraZ(void) { return this->w; }
|
||||||
|
float getRecipCameraZ(void) { return 1.0f/this->w; }
|
||||||
RGBA getColor(void) { return makeRGBA(this->r, this->g, this->b, this->a); }
|
RGBA getColor(void) { return makeRGBA(this->r, this->g, this->b, this->a); }
|
||||||
float getU(void) { return this->u; }
|
float getU(void) { return this->u; }
|
||||||
float getV(void) { return this->v; }
|
float getV(void) { return this->v; }
|
||||||
|
|
|
@ -12,6 +12,33 @@ void registerPlatformPlugins(void);
|
||||||
|
|
||||||
extern Device renderdevice;
|
extern Device renderdevice;
|
||||||
|
|
||||||
|
struct Im2DVertex
|
||||||
|
{
|
||||||
|
float32 x, y, z, w;
|
||||||
|
uint32 r, g, b, a;
|
||||||
|
float32 u, v, q, PAD;
|
||||||
|
|
||||||
|
void setScreenX(float32 x) { this->x = x; }
|
||||||
|
void setScreenY(float32 y) { this->y = y; }
|
||||||
|
void setScreenZ(float32 z) { this->z = z; }
|
||||||
|
void setCameraZ(float32 z) { this->w = z; }
|
||||||
|
void setRecipCameraZ(float32 recipz) { this->q = recipz; }
|
||||||
|
void setColor(uint8 r, uint8 g, uint8 b, uint8 a) {
|
||||||
|
this->r = r; this->g = g; this->b = b; this->a = a; }
|
||||||
|
void setU(float32 u, float recipz) { this->u = u; }
|
||||||
|
void setV(float32 v, float recipz) { this->v = v; }
|
||||||
|
|
||||||
|
float getScreenX(void) { return this->x; }
|
||||||
|
float getScreenY(void) { return this->y; }
|
||||||
|
float getScreenZ(void) { return this->z; }
|
||||||
|
float getCameraZ(void) { return this->w; }
|
||||||
|
float getRecipCameraZ(void) { return this->q; }
|
||||||
|
RGBA getColor(void) { return makeRGBA(this->r, this->g, this->b, this->a); }
|
||||||
|
float getU(void) { return this->u; }
|
||||||
|
float getV(void) { return this->v; }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
struct InstanceData
|
struct InstanceData
|
||||||
{
|
{
|
||||||
uint32 dataSize;
|
uint32 dataSize;
|
||||||
|
|
|
@ -798,18 +798,18 @@ rastest_renderTriangles(RWDEVICE::Im2DVertex *scrverts, int32 numVerts, uint16 *
|
||||||
while(numTris--){
|
while(numTris--){
|
||||||
for(i = 0; i < 3; i++){
|
for(i = 0; i < 3; i++){
|
||||||
iv = &scrverts[indices[i]];
|
iv = &scrverts[indices[i]];
|
||||||
v[i].x = iv->x * 16.0f;
|
v[i].x = iv->getScreenX() * 16.0f;
|
||||||
v[i].y = iv->y * 16.0f;
|
v[i].y = iv->getScreenY() * 16.0f;
|
||||||
v[i].z = 16777216*(1.0f-iv->z);
|
v[i].z = 16777216*(1.0f-iv->getScreenZ());
|
||||||
v[i].q = iv->w;
|
v[i].q = iv->getRecipCameraZ();
|
||||||
col = iv->getColor();
|
col = iv->getColor();
|
||||||
v[i].r = col.red;
|
v[i].r = col.red;
|
||||||
v[i].g = col.green;
|
v[i].g = col.green;
|
||||||
v[i].b = col.blue;
|
v[i].b = col.blue;
|
||||||
v[i].a = col.alpha;
|
v[i].a = col.alpha;
|
||||||
v[i].f = 0;
|
v[i].f = 0;
|
||||||
v[i].s = iv->u*iv->w;
|
v[i].s = iv->u*iv->getRecipCameraZ();
|
||||||
v[i].t = iv->v*iv->w;
|
v[i].t = iv->v*iv->getRecipCameraZ();
|
||||||
}
|
}
|
||||||
drawTriangle(rs::canvas, v[0], v[1], v[2]);
|
drawTriangle(rs::canvas, v[0], v[1], v[2]);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue