port from perforce

This commit is contained in:
2026-04-18 22:31:51 +02:00
commit 8d0ab5b7cc
8409 changed files with 3972376 additions and 0 deletions

362
evoke-64k/ev10/Texture.cpp Normal file
View File

@@ -0,0 +1,362 @@
#include "defines.h"
#include "Texture.h"
#include "Random.h"
#include "globals.h"
#include "rotmat.h"
void Texture::Init()
{
m_iSizeX= -1;
m_iSizeY= -1;
m_iSizeZ= -1;
m_iMipLevel= -1;
m_pTexture= NULL;
m_d3dlb.pBits= NULL;
m_d3dlb.RowPitch= -1;
m_d3dlb.SlicePitch= -1;
}
void Texture::DeInit()
{
Release();
}
void Texture::Create( int iSizeX,
int iSizeY,
int iSizeZ,
int iMipLevel )
{
Release();
m_iSizeX= iSizeX;
m_iSizeY= iSizeY;
m_iSizeZ= iSizeZ;
m_iMipLevel= iMipLevel;
if(m_iSizeZ > 1)
{
g_d3d_device->CreateVolumeTexture(
m_iSizeX,
m_iSizeY,
m_iSizeZ,
m_iMipLevel,
0,
D3DFMT_A8R8G8B8,
D3DPOOL_MANAGED,
(IDirect3DVolumeTexture9**)&m_pTexture,
NULL );
}
else
{
m_iSizeZ = 1;
g_d3d_device->CreateTexture(
m_iSizeX,
m_iSizeY,
m_iMipLevel,
0,
D3DFMT_A8R8G8B8,
D3DPOOL_MANAGED,
(IDirect3DTexture9**)&m_pTexture,
NULL );
}
}
void Texture::Release()
{
Unlock();
if( m_pTexture != NULL )
{
m_pTexture->Release();
m_pTexture= NULL;
}
m_iSizeX= -1;
m_iSizeY= -1;
m_iSizeZ= -1;
m_iMipLevel= -1;
m_d3dlb.pBits= NULL;
m_d3dlb.RowPitch= -1;
m_d3dlb.SlicePitch= -1;
}
void Texture::Lock()
{
if(m_iSizeZ > 1)
{
((IDirect3DVolumeTexture9*)m_pTexture)->LockBox( 0, &m_d3dlb, 0, 0 );
}
else
{
D3DLOCKED_RECT d3dlr;
((IDirect3DTexture9*)m_pTexture)->LockRect( 0, &d3dlr, 0, 0 );
m_d3dlb.pBits = d3dlr.pBits;
m_d3dlb.RowPitch = d3dlr.Pitch;
m_d3dlb.SlicePitch = 0;
}
}
void Texture::Unlock()
{
if( m_d3dlb.pBits == NULL )
{
return;
}
if(m_iSizeZ > 1)
{
((IDirect3DVolumeTexture9*)m_pTexture)->UnlockBox( 0 );
}
else
{
((IDirect3DTexture9*)m_pTexture)->UnlockRect( 0 );
}
m_d3dlb.pBits= NULL;
m_d3dlb.RowPitch= -1;
m_d3dlb.SlicePitch= -1;
}
void Texture::PrepareRandomTexture()
{
RandomGenerator rg;
rg.setSeed( 1024 );
for( int i= 0; i < 1024; ++i )
{
rg.genFloat();
}
Lock();
for( int iZ= 0; iZ < m_iSizeZ; ++iZ )
{
for( int iY= 0; iY < m_iSizeY; ++iY )
{
DWORD* pData= (DWORD*)((BYTE*)m_d3dlb.pBits + iY * m_d3dlb.RowPitch + iZ * m_d3dlb.SlicePitch );
for( int iX= 0; iX < m_iSizeX; ++iX )
{
rg.genFloat();
*pData++ = rg.getLastTempValue();
}
}
}
Unlock();
// Generate mip maps
D3DXFilterTexture(m_pTexture, NULL, 0, D3DX_DEFAULT);
}
#ifdef EXTRACODE
#include <fstream>
#endif
void Texture::PrepareRotMatrixFromFile()
{
#ifdef EXTRACODE
Release();
D3DXCreateTextureFromFile(
g_d3d_device,
"64k_pre/rotationalMatrix32.png",
(IDirect3DTexture9**)&m_pTexture );
m_iSizeX= 32;
m_iSizeY= 32;
m_iSizeZ = 1;
m_iMipLevel= 1;
Lock();
std::ofstream ofs( "64k_pre/rotMat.txt" );
for( int iY= 0; iY < m_iSizeY; ++iY )
{
DWORD* pData= (DWORD*)((BYTE*)m_d3dlb.pBits + iY * m_d3dlb.RowPitch );
for( int iX= 0; iX < m_iSizeX; ++iX )
{
//rg.genFloat();
//*pData++ = rg.getLastTempValue();
DWORD dw= *pData++;
ofs << dw << "," << "\n";
}
}
Unlock();
#endif
}
void Texture::PrepareRotMatrix()
{
Lock();
int iPos= 0;
for( int iY= 0; iY < m_iSizeY; ++iY )
{
DWORD* pData= (DWORD*)((BYTE*)m_d3dlb.pBits + iY * m_d3dlb.RowPitch );
for( int iX= 0; iX < m_iSizeX; ++iX )
{
*pData++ = dwRotMatData[ iPos++ ];
}
}
Unlock();
}
void Texture::PrepareSpecTexture()
{
g_pTextures[ TI_LightSpec1D ].Create( 256, 1, 1, 1 );
g_pTextures[ TI_LightSpec1D ].Lock();
float fVal= 255.0f;
for( int i= 0; i <= 255; ++i )
{
int iV= (int)fVal;
((DWORD*)(g_pTextures[ TI_LightSpec1D ].m_d3dlb.pBits))[ 255 - i ]=
0xff << 24 |
( iV & 0xff ) << 16 |
( iV & 0xff ) << 8 |
( iV & 0xff );
fVal*= 0.925f;
}
//unlock
g_pTextures[ TI_LightSpec1D ].Unlock();
}
void Texture::Prepare1DTextures()
{
PrepareSpecTexture();
int iTexIndex= TI_First1D;
static const unsigned char pucDataTest[]=
{
1, // Groesse == 8
255, 255, 255,
7,
255, 255, 255,
0,
16, // Groesse == 128
32, 32, 64,
64,
120, 120, 128,
63,
255, 251, 208,
0,
16, // Groesse == 128
255, 255, 255,
4,
192, 192, 192,
4,
145, 145, 145,
4,
108, 108, 108,
4,
81, 81, 81,
8,
45, 45, 45,
16,
14, 14, 14,
16,
4, 4, 4,
71,
0, 0, 0,
0,
16, // Groesse == 128
80, 0, 165,
16,
38, 3, 238,
18,
0, 183, 195,
12,
0, 217, 110,
18,
1, 232,0,
18,
152, 216,0,
12,
229, 200,0 ,
18,
255, 62,0 ,
15,
225, 18,0 ,
0,
0
};
const unsigned char* pData= pucDataTest;
int ColorIn[ 3 ];
int ColorOut[ 3 ];
while( *pData != 0 )
{
//create Texture
int iTexSize= *pData * 8;
pData++;
/*int iMips= 1;
while( 2 << iMips <= iTexSize )
{
iMips++;
}*/
g_pTextures[ iTexIndex ].Create( iTexSize, 1, 1, 1 );
g_pTextures[ iTexIndex ].Lock();
int iX= 0;
ColorIn[ 0 ]= *pData++;
ColorIn[ 1 ]= *pData++;
ColorIn[ 2 ]= *pData++;
//set Texture Data
while( true )
{
int iLength= *pData;
pData++;
if( iLength == 0 )
{
break;
}
ColorOut[ 0 ]= *pData++;
ColorOut[ 1 ]= *pData++;
ColorOut[ 2 ]= *pData++;
//lerp colors
for( int i= 0; i <= iLength; ++i )
{
int iA= iLength - i;
int iR= ( ColorOut[ 0 ] * i + ColorIn[ 0 ] * iA ) / iLength;
int iG= ( ColorOut[ 1 ] * i + ColorIn[ 1 ] * iA ) / iLength;
int iB= ( ColorOut[ 2 ] * i + ColorIn[ 2 ] * iA ) / iLength;
assert( iX < g_pTextures[ iTexIndex ].m_iSizeX );
((DWORD*)(g_pTextures[ iTexIndex ].m_d3dlb.pBits))[ iX ]=
0xff << 24 |
( iR & 0xff ) << 16 |
( iG & 0xff ) << 8 |
( iB & 0xff );
++iX;
}
--iX;
ColorIn[ 0 ]= ColorOut[ 0 ];
ColorIn[ 1 ]= ColorOut[ 1 ];
ColorIn[ 2 ]= ColorOut[ 2 ];
}
//unlock
g_pTextures[ iTexIndex ].Unlock();
iTexIndex++;
}
}