mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-08 11:38:21 +02:00

Throwing error on member references with ".." cascade token outside invocations (ie: "ts..mA = 123") Fixed 'Thread.ModuleTLSIndex' error - which caused us TLS lookup failures in Beef DLLs Fixed some hotswap errors Made BeefPerf shut down properly Fixed an 'int literal' FixIntUnknown issue where rhs was System.Object which caused an illegal boxing Fixed COFF::LocateSymbol issues with Win32 and also with linking to static libraries - showed up with hot-linking in fmod when hot-adding a floating point mod Fixed a couple memory leaks Fixed alignment issue in COFF::ParseCompileUnit
151 lines
3.2 KiB
C++
151 lines
3.2 KiB
C++
#include "RenderDevice.h"
|
|
#include "BFApp.h"
|
|
#include "Shader.h"
|
|
#include "Texture.h"
|
|
#include "gfx/DrawLayer.h"
|
|
#include "img/TGAData.h"
|
|
#include "img/PNGData.h"
|
|
#include "img/PVRData.h"
|
|
#include "img/BFIData.h"
|
|
#include "img/JPEGData.h"
|
|
#include "util/PerfTimer.h"
|
|
|
|
#include "util/AllocDebug.h"
|
|
|
|
USING_NS_BF;
|
|
|
|
RenderState::RenderState()
|
|
{
|
|
mWriteDepthBuffer = false;
|
|
mCullMode = CullMode_None;
|
|
mDepthFunc = DepthFunc_Always;
|
|
mShader = NULL;
|
|
mClipped = false;
|
|
}
|
|
|
|
RenderTarget::RenderTarget()
|
|
{
|
|
mWidth = 0;
|
|
mHeight = 0;
|
|
mHasBeenDrawnTo = false;
|
|
mHasBeenTargeted = false;
|
|
mResizeNum = 0;
|
|
}
|
|
|
|
RenderWindow::RenderWindow()
|
|
{
|
|
mCurDrawLayer = NULL;
|
|
mRenderDevice = NULL;
|
|
mWindow = NULL;
|
|
}
|
|
|
|
RenderWindow::~RenderWindow()
|
|
{
|
|
for (auto drawLayer : mDrawLayerList)
|
|
delete drawLayer;
|
|
}
|
|
|
|
///
|
|
|
|
RenderDevice::RenderDevice() :
|
|
mPooledIndexBuffers(DRAWBUFFER_IDXBUFFER_SIZE),
|
|
mPooledVertexBuffers(DRAWBUFFER_VTXBUFFER_SIZE),
|
|
mPooledRenderCmdBuffers(DRAWBUFFER_CMDBUFFER_SIZE)
|
|
{
|
|
mCurRenderState = NULL;
|
|
mDefaultRenderState = NULL;
|
|
mPhysRenderState = mDefaultRenderState;
|
|
mResizeCount = 0;
|
|
mCurRenderTarget = NULL;
|
|
mCurDrawLayer = NULL;
|
|
mPhysRenderWindow = NULL;
|
|
}
|
|
|
|
RenderDevice::~RenderDevice()
|
|
{
|
|
for (auto batch : mDrawBatchPool)
|
|
delete batch;
|
|
}
|
|
|
|
void RenderDevice::AddRenderWindow(RenderWindow* renderWindow)
|
|
{
|
|
mRenderWindowList.push_back(renderWindow);
|
|
}
|
|
|
|
void RenderDevice::RemoveRenderWindow(RenderWindow* renderWindow)
|
|
{
|
|
mRenderWindowList.erase(std::find(mRenderWindowList.begin(), mRenderWindowList.end(), renderWindow));
|
|
}
|
|
|
|
void RenderDevice::FrameEnd()
|
|
{
|
|
}
|
|
|
|
RenderState* RenderDevice::CreateRenderState(RenderState* srcRenderState)
|
|
{
|
|
RenderState* renderState = new RenderState();
|
|
if (srcRenderState != NULL)
|
|
*renderState = *srcRenderState;
|
|
return renderState;
|
|
}
|
|
|
|
VertexDefinition* Beefy::RenderDevice::CreateVertexDefinition(VertexDefData* elementData, int numElements)
|
|
{
|
|
VertexDefinition* vertexDefinition = new VertexDefinition();
|
|
vertexDefinition->mElementData = new VertexDefData[numElements];
|
|
vertexDefinition->mNumElements = numElements;
|
|
memcpy(vertexDefinition->mElementData, elementData, numElements * sizeof(VertexDefData));
|
|
return vertexDefinition;
|
|
}
|
|
|
|
Texture* RenderDevice::LoadTexture(const StringImpl& fileName, int flags)
|
|
{
|
|
int dotPos = (int)fileName.LastIndexOf('.');
|
|
String ext;
|
|
if (dotPos != -1)
|
|
ext = fileName.Substring(dotPos);
|
|
|
|
ImageData* imageData = NULL;
|
|
bool handled = false;
|
|
bool failed = false;
|
|
|
|
if (fileName == "!white")
|
|
{
|
|
imageData = new ImageData();
|
|
imageData->CreateNew(1, 1, true);
|
|
imageData->mBits[0] = 0xFFFFFFFF;
|
|
handled = true;
|
|
}
|
|
else if (ext == ".tga")
|
|
imageData = new TGAData();
|
|
else if (ext == ".png")
|
|
imageData = new PNGData();
|
|
else if (ext == ".jpg")
|
|
imageData = new JPEGData();
|
|
else if (ext == ".pvr")
|
|
imageData = new PVRData();
|
|
else
|
|
{
|
|
BF_FATAL("Unknown texture format");
|
|
return NULL; // Unknown format
|
|
}
|
|
|
|
if (!handled)
|
|
{
|
|
imageData->mWantsAlphaPremultiplied = (flags & TextureFlag_NoPremult) == 0;
|
|
if (!imageData->LoadFromFile(fileName))
|
|
{
|
|
failed = true;
|
|
BF_FATAL("Failed to load image");
|
|
}
|
|
}
|
|
|
|
Texture* aTexture = NULL;
|
|
if (!failed)
|
|
aTexture = LoadTexture(imageData, flags);
|
|
|
|
delete imageData;
|
|
return aTexture;
|
|
}
|
|
|
|
|