Files
Work/ddraw/HOLD/TRITEXTR.CPP
2024-08-07 09:16:27 -04:00

114 lines
3.7 KiB
C++

#include <ddraw/tritextr.hpp>
#include <common/bitmap.hpp>
#include <common/dib.hpp>
#include <common/file.hpp>
#include <engine/device3d.hpp>
#include <ddraw/drawsfc.hpp>
File outFile("output.dat","wb");
DirectTriTexture::DirectTriTexture(const Triangle3D &angle3D,Bitmap &textureBitmap,DIBitmap &drawingSurface,Device3D &displayDevice,MapFrom mapFrom)
{
mTriangle3D=angle3D;
displayDevice.mapCoordinates(mTriangle3D,mTriangle);
// mTriangle.orderPoints();
mTriEdge.x0(mTriangle[0].x());
mTriEdge.y0(mTriangle[0].y());
mTriEdge.x1(mTriangle[1].x());
mTriEdge.y1(mTriangle[1].y());
mTriEdge.x2(mTriangle[2].x());
mTriEdge.y2(mTriangle[2].y());
if(MapFromUpperRight==mapFrom)
{
mTriEdge.u0(0);
mTriEdge.v0(0);
mTriEdge.u1(textureBitmap.width()-1);
mTriEdge.v1(0);
mTriEdge.u2(textureBitmap.width()-1);
mTriEdge.v2(textureBitmap.height()-1);
}
else
{
mTriEdge.u0(0);
mTriEdge.v0(0);
mTriEdge.u1(textureBitmap.width()-1);
mTriEdge.v1(textureBitmap.height()-1);
mTriEdge.u2(0);
mTriEdge.v2(textureBitmap.height()-1);
}
::directTriSetSrcBitmapInfo(textureBitmap.width(),textureBitmap.height(),textureBitmap.getDataPtr());
::directTriSetDstBitmapInfo(drawingSurface.width(),drawingSurface.height(),drawingSurface.width(),(unsigned char*)drawingSurface.ptrData());
::directTriSetPixelCallback(&DirectTriTexture::pixelCallback);
::directTriSetEdgeCallback(&DirectTriTexture::edgeCallback);
}
DirectTriTexture::DirectTriTexture(const Triangle3D &angle3D,Bitmap &textureBitmap,DrawingSurface &drawingSurface,Device3D &displayDevice,MapFrom mapFrom)
{
mTriangle3D=angle3D;
displayDevice.mapCoordinates(mTriangle3D,mTriangle);
// mTriangle.orderPoints();
mTriEdge.x0(mTriangle[0].x());
mTriEdge.y0(mTriangle[0].y());
mTriEdge.x1(mTriangle[1].x());
mTriEdge.y1(mTriangle[1].y());
mTriEdge.x2(mTriangle[2].x());
mTriEdge.y2(mTriangle[2].y());
if(MapFromUpperRight==mapFrom)
{
mTriEdge.u0(0);
mTriEdge.v0(0);
mTriEdge.u1(textureBitmap.width()-1);
mTriEdge.v1(0);
mTriEdge.u2(textureBitmap.width()-1);
mTriEdge.v2(textureBitmap.height()-1);
}
else
{
mTriEdge.u0(0);
mTriEdge.v0(0);
mTriEdge.u1(textureBitmap.width()-1);
mTriEdge.v1(textureBitmap.height()-1);
mTriEdge.u2(0);
mTriEdge.v2(textureBitmap.height()-1);
}
::directTriSetSrcBitmapInfo(textureBitmap.width(),textureBitmap.height(),textureBitmap.getDataPtr());
::directTriSetDstBitmapInfo(drawingSurface.width(),drawingSurface.height(),drawingSurface.pitch(),(unsigned char*)drawingSurface.ptrSurface());
::directTriSetPixelCallback(&DirectTriTexture::pixelCallback);
::directTriSetEdgeCallback(&DirectTriTexture::edgeCallback);
}
DirectTriTexture::~DirectTriTexture()
{
}
void DirectTriTexture::mapTexture(void)
{
::directTriMapTexture(&mTriEdge);
}
void DirectTriTexture::pixelCallback(int y,int x,int vi,int ui)
{
#if 0
String strDebug;
if(!y&&!x&&!vi&&!ui)outFile.writeLine("scanline");
else
{
::sprintf(strDebug,"ui: %d vi:%d x:%d y:%d",ui,vi,x,y);
outFile.writeLine(strDebug);
}
#endif
}
void DirectTriTexture::edgeCallback(DirectTriEdge *pEdge)
{
#if 0
String strDebug;
strDebug.reserve(1024);
::sprintf(strDebug,"xLeft:%d xRight:%d uLeft:%d uRight:%d vLeft:%d vRight:%d dxLeft:%d dxRight:%d duLeft:%d duRight:%d dvLeft:%d duRight:%d",
int((float)pEdge->xLeft()/2048.00),int((float)pEdge->xRight()/2048.00),int((float)pEdge->uLeft()/2048.00),int((float)pEdge->uRight()/2048.00),int((float)pEdge->vLeft()/2048.00),int((float)pEdge->vRight()/2048.00),
int((float)pEdge->dxLeft()/2048.00),int((float)pEdge->dxRight()/2048.00),int((float)pEdge->duLeft()/2048.00),int((float)pEdge->duRight()/2048.00),int((float)pEdge->dvLeft()/2048.00),int((float)pEdge->dvRight()/2048.00));
outFile.writeLine(strDebug);
#endif
}