mirror of
https://github.com/aap/librw.git
synced 2025-12-20 17:39:49 +00:00
added imguizmo; subraster handling etc
This commit is contained in:
@@ -350,7 +350,6 @@ int32 nativeRasterOffset;
|
||||
void
|
||||
rasterCreate(Raster *raster)
|
||||
{
|
||||
D3dRaster *natras = PLUGINOFFSET(D3dRaster, raster, nativeRasterOffset);
|
||||
static uint32 formatMap[] = {
|
||||
0,
|
||||
D3DFMT_A1R5G5B5,
|
||||
@@ -375,20 +374,53 @@ rasterCreate(Raster *raster)
|
||||
0,
|
||||
0, 0, 0, 0, 0
|
||||
};
|
||||
if(raster->flags & 0x80)
|
||||
return;
|
||||
|
||||
D3dRaster *natras = PLUGINOFFSET(D3dRaster, raster, nativeRasterOffset);
|
||||
uint32 format;
|
||||
if(raster->format & (Raster::PAL4 | Raster::PAL8)){
|
||||
format = D3DFMT_P8;
|
||||
natras->palette = (uint8*)rwNew(4*256, MEMDUR_EVENT | ID_DRIVER);
|
||||
}else
|
||||
format = formatMap[(raster->format >> 8) & 0xF];
|
||||
natras->format = format;
|
||||
natras->hasAlpha = alphaMap[(raster->format >> 8) & 0xF];
|
||||
int32 levels = Raster::calculateNumLevels(raster->width, raster->height);
|
||||
natras->texture = createTexture(raster->width, raster->height,
|
||||
raster->format & Raster::MIPMAP ? levels : 1,
|
||||
format);
|
||||
int32 levels;
|
||||
|
||||
// Dummy to use as subraster
|
||||
if(raster->width == 0 || raster->height == 0){
|
||||
raster->flags |= Raster::DONTALLOCATE;
|
||||
raster->stride = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
switch(raster->type){
|
||||
case Raster::NORMAL:
|
||||
case Raster::TEXTURE:
|
||||
if(raster->flags & Raster::DONTALLOCATE)
|
||||
return;
|
||||
if(raster->format & (Raster::PAL4 | Raster::PAL8)){
|
||||
format = D3DFMT_P8;
|
||||
natras->palette = (uint8*)rwNew(4*256, MEMDUR_EVENT | ID_DRIVER);
|
||||
}else
|
||||
format = formatMap[(raster->format >> 8) & 0xF];
|
||||
natras->format = format;
|
||||
natras->hasAlpha = alphaMap[(raster->format >> 8) & 0xF];
|
||||
levels = Raster::calculateNumLevels(raster->width, raster->height);
|
||||
natras->texture = createTexture(raster->width, raster->height,
|
||||
raster->format & Raster::MIPMAP ? levels : 1,
|
||||
format);
|
||||
break;
|
||||
|
||||
case Raster::ZBUFFER:
|
||||
raster->flags |= Raster::DONTALLOCATE;
|
||||
// TODO
|
||||
break;
|
||||
case Raster::CAMERA:
|
||||
// TODO: get stuff from video mode
|
||||
raster->flags |= Raster::DONTALLOCATE;
|
||||
raster->originalWidth = raster->width;
|
||||
raster->originalHeight = raster->height;
|
||||
raster->stride = 0;
|
||||
raster->pixels = nil;
|
||||
break;
|
||||
case Raster::CAMERATEXTURE:
|
||||
raster->flags |= Raster::DONTALLOCATE;
|
||||
// TODO
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
uint8*
|
||||
@@ -666,7 +698,7 @@ allocateDXT(Raster *raster, int32 dxt, int32 numLevels, bool32 hasAlpha)
|
||||
ras->texture = createTexture(raster->width, raster->height,
|
||||
raster->format & Raster::MIPMAP ? numLevels : 1,
|
||||
ras->format);
|
||||
raster->flags &= ~0x80;
|
||||
raster->flags &= ~Raster::DONTALLOCATE;
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -418,6 +418,7 @@ beginUpdate(Camera *cam)
|
||||
view[13] = inv.pos.y;
|
||||
view[14] = inv.pos.z;
|
||||
view[15] = 1.0f;
|
||||
memcpy(&cam->devView, view, sizeof(RawMatrix));
|
||||
d3ddevice->SetTransform(D3DTS_VIEW, (D3DMATRIX*)view);
|
||||
|
||||
// Projection Matrix
|
||||
@@ -451,12 +452,22 @@ beginUpdate(Camera *cam)
|
||||
proj[15] = 1.0f;
|
||||
}
|
||||
proj[14] = -cam->nearPlane*proj[10];
|
||||
memcpy(&cam->devProj, proj, sizeof(RawMatrix));
|
||||
d3ddevice->SetTransform(D3DTS_PROJECTION, (D3DMATRIX*)proj);
|
||||
|
||||
// TODO: figure out where this is really done
|
||||
setRenderState(D3DRS_FOGSTART, *(uint32*)&cam->fogPlane);
|
||||
setRenderState(D3DRS_FOGEND, *(uint32*)&cam->farPlane);
|
||||
|
||||
D3DVIEWPORT9 vp;
|
||||
vp.MinZ = 0.0f;
|
||||
vp.MaxZ = 1.0f;
|
||||
vp.X = cam->frameBuffer->offsetX;
|
||||
vp.Y = cam->frameBuffer->offsetY;
|
||||
vp.Width = cam->frameBuffer->width;
|
||||
vp.Height = cam->frameBuffer->height;
|
||||
d3ddevice->SetViewport(&vp);
|
||||
|
||||
// TODO: figure out when to call this
|
||||
d3ddevice->BeginScene();
|
||||
}
|
||||
|
||||
@@ -502,7 +502,6 @@ createTexture(int32 width, int32 height, int32 numlevels, uint32 format)
|
||||
void
|
||||
rasterCreate(Raster *raster)
|
||||
{
|
||||
XboxRaster *natras = PLUGINOFFSET(XboxRaster, raster, nativeRasterOffset);
|
||||
static uint32 formatMap[] = {
|
||||
D3DFMT_UNKNOWN,
|
||||
D3DFMT_A1R5G5B5,
|
||||
@@ -533,20 +532,38 @@ rasterCreate(Raster *raster)
|
||||
0,
|
||||
0, 0, 0, 0, 0
|
||||
};
|
||||
if(raster->flags & 0x80)
|
||||
return;
|
||||
|
||||
XboxRaster *natras = PLUGINOFFSET(XboxRaster, raster, nativeRasterOffset);
|
||||
uint32 format;
|
||||
if(raster->format & (Raster::PAL4 | Raster::PAL8)){
|
||||
format = D3DFMT_P8;
|
||||
natras->palette = (uint8*)rwNew(4*256, MEMDUR_EVENT | ID_DRIVER);
|
||||
}else
|
||||
format = formatMap[(raster->format >> 8) & 0xF];
|
||||
natras->format = 0;
|
||||
natras->hasAlpha = alphaMap[(raster->format >> 8) & 0xF];
|
||||
int32 levels = Raster::calculateNumLevels(raster->width, raster->height);
|
||||
natras->texture = createTexture(raster->width, raster->height,
|
||||
raster->format & Raster::MIPMAP ? levels : 1,
|
||||
format);
|
||||
int32 levels;
|
||||
|
||||
// Dummy to use as subraster
|
||||
if(raster->width == 0 || raster->height == 0){
|
||||
raster->flags |= Raster::DONTALLOCATE;
|
||||
raster->stride = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
switch(raster->type){
|
||||
case Raster::NORMAL:
|
||||
case Raster::TEXTURE:
|
||||
if(raster->flags & Raster::DONTALLOCATE)
|
||||
return;
|
||||
if(raster->format & (Raster::PAL4 | Raster::PAL8)){
|
||||
format = D3DFMT_P8;
|
||||
natras->palette = (uint8*)rwNew(4*256, MEMDUR_EVENT | ID_DRIVER);
|
||||
}else
|
||||
format = formatMap[(raster->format >> 8) & 0xF];
|
||||
natras->format = 0;
|
||||
natras->hasAlpha = alphaMap[(raster->format >> 8) & 0xF];
|
||||
levels = Raster::calculateNumLevels(raster->width, raster->height);
|
||||
natras->texture = createTexture(raster->width, raster->height,
|
||||
raster->format & Raster::MIPMAP ? levels : 1,
|
||||
format);
|
||||
default:
|
||||
// unsupported
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
uint8*
|
||||
@@ -661,14 +678,14 @@ readNativeTexture(Stream *stream)
|
||||
assert(unknownFlag == 0);
|
||||
Raster *raster;
|
||||
if(compression){
|
||||
raster = Raster::create(width, height, depth, format | type | 0x80, PLATFORM_XBOX);
|
||||
raster = Raster::create(width, height, depth, format | type | Raster::DONTALLOCATE, PLATFORM_XBOX);
|
||||
XboxRaster *ras = PLUGINOFFSET(XboxRaster, raster, nativeRasterOffset);
|
||||
ras->format = compression;
|
||||
ras->hasAlpha = hasAlpha;
|
||||
ras->texture = createTexture(raster->width, raster->height,
|
||||
raster->format & Raster::MIPMAP ? numLevels : 1,
|
||||
ras->format);
|
||||
raster->flags &= ~0x80;
|
||||
raster->flags &= ~Raster::DONTALLOCATE;
|
||||
}else
|
||||
raster = Raster::create(width, height, depth, format | type, PLATFORM_XBOX);
|
||||
XboxRaster *ras = PLUGINOFFSET(XboxRaster, raster, nativeRasterOffset);
|
||||
|
||||
Reference in New Issue
Block a user