You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
o3de/Code/CryEngine/RenderDll/XRenderNULL/NULL_Renderer.h

446 lines
32 KiB
C++

/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
// Original file Copyright Crytek GMBH or its affiliates, used under license.
#pragma once
/*
===========================================
The NULLRenderer interface Class
===========================================
*/
#define MAX_TEXTURE_STAGES 4
#include "CryArray.h"
#include "NULLRenderAuxGeom.h"
//////////////////////////////////////////////////////////////////////
class CNULLRenderer
: public CRenderer
{
public:
////---------------------------------------------------------------------------------------------------------------------
virtual SRenderPipeline* GetRenderPipeline() override { return nullptr; }
virtual SRenderThread* GetRenderThread() override { return nullptr; }
virtual void FX_SetState(int st, int AlphaRef = -1, int RestoreState = 0) override;
void SetCull([[maybe_unused]] ECull eCull, [[maybe_unused]] bool bSkipMirrorCull = false) override {}
virtual SDepthTexture* GetDepthBufferOrig() override { return nullptr; }
virtual uint32 GetBackBufferWidth() override { return 0; }
virtual uint32 GetBackBufferHeight() override { return 0; };
virtual const SRenderTileInfo* GetRenderTileInfo() const override { return nullptr; }
virtual void FX_CommitStates([[maybe_unused]] const SShaderTechnique* pTech, [[maybe_unused]] const SShaderPass* pPass, [[maybe_unused]] bool bUseMaterialState) override {}
virtual void FX_Commit([[maybe_unused]] bool bAllowDIP = false) override {}
virtual long FX_SetVertexDeclaration([[maybe_unused]] int StreamMask, [[maybe_unused]] const AZ::Vertex::Format& vertexFormat) override { return 0; }
virtual void FX_DrawIndexedPrimitive([[maybe_unused]] const eRenderPrimitiveType eType, [[maybe_unused]] const int nVBOffset, [[maybe_unused]] const int nMinVertexIndex, [[maybe_unused]] const int nVerticesCount, [[maybe_unused]] const int nStartIndex, [[maybe_unused]] const int nNumIndices, [[maybe_unused]] bool bInstanced = false) override {}
virtual SDepthTexture* FX_GetDepthSurface([[maybe_unused]] int nWidth, [[maybe_unused]] int nHeight, [[maybe_unused]] bool bAA, [[maybe_unused]] bool shaderResourceView = false) override { return nullptr; }
virtual long FX_SetIStream([[maybe_unused]] const void* pB, [[maybe_unused]] uint32 nOffs, [[maybe_unused]] RenderIndexType idxType) override { return -1; }
virtual long FX_SetVStream([[maybe_unused]] int nID, [[maybe_unused]] const void* pB, [[maybe_unused]] uint32 nOffs, [[maybe_unused]] uint32 nStride, [[maybe_unused]] uint32 nFreq = 1) override { return -1; }
virtual void FX_DrawPrimitive([[maybe_unused]] const eRenderPrimitiveType eType, [[maybe_unused]] const int nStartVertex, [[maybe_unused]] const int nVerticesCount, [[maybe_unused]] const int nInstanceVertices = 0) {}
virtual void DrawQuad3D([[maybe_unused]] const Vec3& v0, [[maybe_unused]] const Vec3& v1, [[maybe_unused]] const Vec3& v2, [[maybe_unused]] const Vec3& v3, [[maybe_unused]] const ColorF& color, [[maybe_unused]] float ftx0, [[maybe_unused]] float fty0, [[maybe_unused]] float ftx1, [[maybe_unused]] float fty1) override {}
virtual void FX_ClearTarget(ITexture* pTex) override;
virtual void FX_ClearTarget(SDepthTexture* pTex) override;
virtual bool FX_SetRenderTarget(int nTarget, void* pTargetSurf, SDepthTexture* pDepthTarget, uint32 nTileCount = 1) override;
virtual bool FX_PushRenderTarget(int nTarget, void* pTargetSurf, SDepthTexture* pDepthTarget, uint32 nTileCount = 1) override;
virtual bool FX_SetRenderTarget(int nTarget, CTexture* pTarget, SDepthTexture* pDepthTarget, bool bPush = false, int nCMSide = -1, bool bScreenVP = false, uint32 nTileCount = 1) override;
virtual bool FX_PushRenderTarget(int nTarget, CTexture* pTarget, SDepthTexture* pDepthTarget, int nCMSide = -1, bool bScreenVP = false, uint32 nTileCount = 1) override;
virtual bool FX_RestoreRenderTarget(int nTarget) override;
virtual bool FX_PopRenderTarget(int nTarget) override;
void FX_SetActiveRenderTargets(bool bAllowDIP = false) override;
virtual void EF_Scissor([[maybe_unused]] bool bEnable, [[maybe_unused]] int sX, [[maybe_unused]] int sY, [[maybe_unused]] int sWdt, [[maybe_unused]] int sHgt) override {}
virtual void FX_ResetPipe() override {}
////---------------------------------------------------------------------------------------------------------------------
CNULLRenderer();
virtual ~CNULLRenderer();
virtual WIN_HWND Init(int x, int y, int width, int height, unsigned int cbpp, int zbpp, int sbits, bool fullscreen, bool isEditor, WIN_HINSTANCE hinst, WIN_HWND Glhwnd = 0, bool bReInit = false, const SCustomRenderInitArgs* pCustomArgs = 0, bool bShaderCacheGen = false);
virtual WIN_HWND GetHWND();
virtual bool SetWindowIcon(const char* path);
/////////////////////////////////////////////////////////////////////////////////
// Render-context management
/////////////////////////////////////////////////////////////////////////////////
virtual bool SetCurrentContext(WIN_HWND hWnd);
virtual bool CreateContext(WIN_HWND hWnd, bool bAllowMSAA, int SSX, int SSY);
virtual bool DeleteContext(WIN_HWND hWnd);
virtual void MakeMainContextActive();
virtual int GetCurrentContextViewportWidth() const { return -1; }
virtual int GetCurrentContextViewportHeight() const { return -1; }
/////////////////////////////////////////////////////////////////////////////////
virtual int CreateRenderTarget(const char* name, int nWidth, int nHeight, const ColorF& cClear, ETEX_Format eTF = eTF_R8G8B8A8);
virtual bool DestroyRenderTarget(int nHandle);
virtual bool ResizeRenderTarget(int nHandle, int nWidth, int nHeight);
virtual bool SetRenderTarget(int nHandle, SDepthTexture* pDepthSurf = nullptr);
virtual SDepthTexture* CreateDepthSurface(int nWidth, int nHeight, bool shaderResourceView = false);
virtual void DestroyDepthSurface(SDepthTexture* pDepthSurf);
virtual int GetOcclusionBuffer(uint16* pOutOcclBuffer, Matrix44* pmCamBuffe);
virtual void WaitForParticleBuffer(threadID nThreadId);
virtual void GetVideoMemoryUsageStats([[maybe_unused]] size_t& vidMemUsedThisFrame, [[maybe_unused]] size_t& vidMemUsedRecently, [[maybe_unused]] bool bGetPoolsSizes = false) {}
virtual void SetRenderTile([[maybe_unused]] f32 nTilesPosX, [[maybe_unused]] f32 nTilesPosY, [[maybe_unused]] f32 nTilesGridSizeX, [[maybe_unused]] f32 nTilesGridSizeY) {}
virtual void EF_InvokeShadowMapRenderJobs([[maybe_unused]] const int nFlags){}
//! Fills array of all supported video formats (except low resolution formats)
//! Returns number of formats, also when called with NULL
virtual int EnumDisplayFormats(SDispFormat* Formats);
//! Return all supported by video card video AA formats
virtual int EnumAAFormats([[maybe_unused]] SAAFormat* Formats) { return 0; }
//! Changes resolution of the window/device (doen't require to reload the level
virtual bool ChangeResolution(int nNewWidth, int nNewHeight, int nNewColDepth, int nNewRefreshHZ, bool bFullScreen, bool bForce);
virtual Vec2 SetViewportDownscale([[maybe_unused]] float xscale, [[maybe_unused]] float yscale) { return Vec2(0, 0); }
virtual void SetCurDownscaleFactor([[maybe_unused]] Vec2 sf) {};
virtual EScreenAspectRatio GetScreenAspect([[maybe_unused]] int nWidth, [[maybe_unused]] int nHeight) { return eAspect_4_3; }
virtual void SwitchToNativeResolutionBackbuffer() {}
virtual void ShutDown(bool bReInit = false);
virtual void ShutDownFast();
virtual void BeginFrame();
virtual void RenderDebug(bool bRernderStats = true);
virtual void EndFrame();
virtual void LimitFramerate([[maybe_unused]] const int maxFPS, [[maybe_unused]] const bool bUseSleep) {}
virtual void TryFlush();
virtual void Reset (void) {};
virtual void RT_ReleaseCB(void*){}
virtual void DrawDynVB(SVF_P3F_C4B_T2F* pBuf, uint16* pInds, int nVerts, int nInds, const PublicRenderPrimitiveType nPrimType);
virtual void DrawDynUiPrimitiveList(DynUiPrimitiveList& primitives, int totalNumVertices, int totalNumIndices);
virtual void DrawBuffer(CVertexBuffer* pVBuf, CIndexBuffer* pIBuf, int nNumIndices, int nOffsIndex, const PublicRenderPrimitiveType nPrmode, int nVertStart = 0, int nVertStop = 0);
virtual void CheckError(const char* comment);
virtual void DrawLine([[maybe_unused]] const Vec3& vPos1, [[maybe_unused]] const Vec3& vPos2) {};
virtual void Graph([[maybe_unused]] byte* g, [[maybe_unused]] int x, [[maybe_unused]] int y, [[maybe_unused]] int wdt, [[maybe_unused]] int hgt, [[maybe_unused]] int nC, [[maybe_unused]] int type, [[maybe_unused]] const char* text, [[maybe_unused]] ColorF& color, [[maybe_unused]] float fScale) {};
virtual void SetCamera(const CCamera& cam);
virtual void SetViewport(int x, int y, int width, int height, int id = 0);
virtual void SetScissor(int x = 0, int y = 0, int width = 0, int height = 0);
virtual void GetViewport(int* x, int* y, int* width, int* height) const;
virtual void SetCullMode (int mode = R_CULL_BACK);
virtual bool EnableFog (bool enable);
virtual void SetFogColor(const ColorF& color);
virtual void EnableVSync(bool enable);
virtual void DrawPrimitivesInternal(CVertexBuffer* src, int vert_num, const eRenderPrimitiveType prim_type);
virtual void PushMatrix();
virtual void RotateMatrix(float a, float x, float y, float z);
virtual void RotateMatrix(const Vec3& angels);
virtual void TranslateMatrix(float x, float y, float z);
virtual void ScaleMatrix(float x, float y, float z);
virtual void TranslateMatrix(const Vec3& pos);
virtual void MultMatrix(const float* mat);
virtual void LoadMatrix(const Matrix34* src = 0);
virtual void PopMatrix();
virtual void EnableTMU(bool enable);
virtual void SelectTMU(int tnum);
virtual bool ChangeDisplay(unsigned int width, unsigned int height, unsigned int cbpp);
virtual void ChangeViewport(unsigned int x, unsigned int y, unsigned int width, unsigned int height, bool bMainViewport = false, float scaleWidth = 1.0f, float scaleHeight = 1.0f);
virtual bool SaveTga([[maybe_unused]] unsigned char* sourcedata, [[maybe_unused]] int sourceformat, [[maybe_unused]] int w, [[maybe_unused]] int h, [[maybe_unused]] const char* filename, [[maybe_unused]] bool flip) const { return false; }
//download an image to video memory. 0 in case of failure
virtual void CreateResourceAsync([[maybe_unused]] SResourceAsync* Resource) {};
virtual void ReleaseResourceAsync([[maybe_unused]] SResourceAsync* Resource) {};
void ReleaseResourceAsync(AZStd::unique_ptr<SResourceAsync> Resource) override {};
virtual unsigned int DownLoadToVideoMemory([[maybe_unused]] const byte* data, [[maybe_unused]] int w, [[maybe_unused]] int h, [[maybe_unused]] ETEX_Format eTFSrc, [[maybe_unused]] ETEX_Format eTFDst, [[maybe_unused]] int nummipmap, [[maybe_unused]] bool repeat = true, [[maybe_unused]] int filter = FILTER_BILINEAR, [[maybe_unused]] int Id = 0, [[maybe_unused]] const char* szCacheName = NULL, [[maybe_unused]] int flags = 0, [[maybe_unused]] EEndian eEndian = eLittleEndian, [[maybe_unused]] RectI* pRegion = NULL, [[maybe_unused]] bool bAsynDevTexCreation = false) { return 0; }
virtual unsigned int DownLoadToVideoMemoryCube([[maybe_unused]] const byte* data, [[maybe_unused]] int w, [[maybe_unused]] int h, [[maybe_unused]] ETEX_Format eTFSrc, [[maybe_unused]] ETEX_Format eTFDst, [[maybe_unused]] int nummipmap, [[maybe_unused]] bool repeat = true, [[maybe_unused]] int filter = FILTER_BILINEAR, [[maybe_unused]] int Id = 0, [[maybe_unused]] const char* szCacheName = NULL, [[maybe_unused]] int flags = 0, [[maybe_unused]] EEndian eEndian = eLittleEndian, [[maybe_unused]] RectI* pRegion = NULL, [[maybe_unused]] bool bAsynDevTexCreation = false) { return 0; }
virtual unsigned int DownLoadToVideoMemory3D([[maybe_unused]] const byte* data, [[maybe_unused]] int w, [[maybe_unused]] int h, [[maybe_unused]] int d, [[maybe_unused]] ETEX_Format eTFSrc, [[maybe_unused]] ETEX_Format eTFDst, [[maybe_unused]] int nummipmap, [[maybe_unused]] bool repeat = true, [[maybe_unused]] int filter = FILTER_BILINEAR, [[maybe_unused]] int Id = 0, [[maybe_unused]] const char* szCacheName = NULL, [[maybe_unused]] int flags = 0, [[maybe_unused]] EEndian eEndian = eLittleEndian, [[maybe_unused]] RectI* pRegion = NULL, [[maybe_unused]] bool bAsynDevTexCreation = false) { return 0; }
virtual void UpdateTextureInVideoMemory([[maybe_unused]] uint32 tnum, [[maybe_unused]] const byte* newdata, [[maybe_unused]] int posx, [[maybe_unused]] int posy, [[maybe_unused]] int w, [[maybe_unused]] int h, [[maybe_unused]] ETEX_Format eTFSrc = eTF_R8G8B8A8, [[maybe_unused]] int posz = 0, [[maybe_unused]] int sizez = 1){}
virtual bool SetGammaDelta(const float fGamma);
virtual void RestoreGamma(void) {};
virtual void RemoveTexture([[maybe_unused]] unsigned int TextureId) {}
virtual void DeleteFont([[maybe_unused]] IFFont* font) {}
virtual void Draw2dImage(float xpos, float ypos, float w, float h, int texture_id, float s0 = 0, float t0 = 0, float s1 = 1, float t1 = 1, float angle = 0, float r = 1, float g = 1, float b = 1, float a = 1, float z = 1);
virtual void Push2dImage(float xpos, float ypos, float w, float h, int texture_id, float s0 = 0, float t0 = 0, float s1 = 1, float t1 = 1, float angle = 0, float r = 1, float g = 1, float b = 1, float a = 1, float z = 1, float stereoDepth = 0);
virtual void Draw2dImageList();
virtual void Draw2dImageStretchMode([[maybe_unused]] bool stretch) {};
virtual void DrawImage(float xpos, float ypos, float w, float h, int texture_id, float s0, float t0, float s1, float t1, float r, float g, float b, float a, bool filtered = true);
virtual void DrawImageWithUV(float xpos, float ypos, float z, float w, float h, int texture_id, float s[4], float t[4], float r, float g, float b, float a, bool filtered = true);
virtual void PushWireframeMode(int mode);
virtual void PopWireframeMode();
virtual void FX_PushWireframeMode(int mode);
virtual void FX_PopWireframeMode();
virtual void FX_SetWireframeMode(int mode);
virtual void FX_PreRender([[maybe_unused]] int Stage) override {}
virtual void FX_PostRender() override {}
virtual void ResetToDefault();
virtual void SetDefaultRenderStates() {}
virtual int GenerateAlphaGlowTexture(float k);
virtual void ApplyViewParameters(const CameraViewParameters&) override {}
virtual void SetMaterialColor(float r, float g, float b, float a);
virtual void GetMemoryUsage(ICrySizer* Sizer);
// Project/UnProject. Returns true if successful.
virtual bool ProjectToScreen(float ptx, float pty, float ptz,
float* sx, float* sy, float* sz);
virtual int UnProject(float sx, float sy, float sz,
float* px, float* py, float* pz,
const float modelMatrix[16],
const float projMatrix[16],
const int viewport[4]);
virtual int UnProjectFromScreen(float sx, float sy, float sz,
float* px, float* py, float* pz);
// Shadow Mapping
virtual bool PrepareDepthMap(ShadowMapFrustum* SMSource, int nFrustumLOD = 0, bool bClearPool = false);
virtual void DrawAllShadowsOnTheScreen();
virtual void OnEntityDeleted([[maybe_unused]] IRenderNode* pRenderNode) {};
virtual void FX_SetClipPlane (bool bEnable, float* pPlane, bool bRefract);
virtual void SetColorOp([[maybe_unused]] byte eCo, [[maybe_unused]] byte eAo, [[maybe_unused]] byte eCa, [[maybe_unused]] byte eAa) {};
virtual void EF_SetColorOp([[maybe_unused]] byte eCo, [[maybe_unused]] byte eAo, [[maybe_unused]] byte eCa, [[maybe_unused]] byte eAa) {};
virtual void SetSrgbWrite([[maybe_unused]] bool srgbWrite) {};
virtual void EF_SetSrgbWrite([[maybe_unused]] bool sRGBWrite) {};
//for editor
virtual void GetModelViewMatrix(float* mat);
virtual void GetProjectionMatrix(float* mat);
//for texture
virtual ITexture* EF_LoadTexture(const char* nameTex, const uint32 flags = 0);
virtual ITexture* EF_LoadDefaultTexture(const char* nameTex);
virtual void DrawQuad(const Vec3& right, const Vec3& up, const Vec3& origin, int nFlipMode = 0);
virtual void DrawQuad(float dy, float dx, float dz, float x, float y, float z);
void DrawQuad([[maybe_unused]] float x0, [[maybe_unused]] float y0, [[maybe_unused]] float x1, [[maybe_unused]] float y1, [[maybe_unused]] const ColorF& color, [[maybe_unused]] float z = 1.0f, [[maybe_unused]] float s0 = 0.0f, [[maybe_unused]] float t0 = 0.0f, [[maybe_unused]] float s1 = 1.0f, [[maybe_unused]] float t1 = 1.0f) override {}
// NOTE: deprecated
virtual void ClearTargetsImmediately(uint32 nFlags);
virtual void ClearTargetsImmediately(uint32 nFlags, const ColorF& Colors, float fDepth);
virtual void ClearTargetsImmediately(uint32 nFlags, const ColorF& Colors);
virtual void ClearTargetsImmediately(uint32 nFlags, float fDepth);
virtual void ClearTargetsLater(uint32 nFlags);
virtual void ClearTargetsLater(uint32 nFlags, const ColorF& Colors, float fDepth);
virtual void ClearTargetsLater(uint32 nFlags, const ColorF& Colors);
virtual void ClearTargetsLater(uint32 nFlags, float fDepth);
virtual void ReadFrameBuffer(unsigned char* pRGB, int nImageX, int nSizeX, int nSizeY, ERB_Type eRBType, bool bRGBA, int nScaledX = -1, int nScaledY = -1);
virtual void ReadFrameBufferFast(uint32* pDstARGBA8, int dstWidth, int dstHeight, bool BGRA = true);
virtual bool CaptureFrameBufferFast(unsigned char* pDstRGBA8, int destinationWidth, int destinationHeight);
virtual bool CopyFrameBufferFast(unsigned char* pDstRGBA8, int destinationWidth, int destinationHeight);
virtual bool RegisterCaptureFrame(ICaptureFrameListener* pCapture);
virtual bool UnRegisterCaptureFrame(ICaptureFrameListener* pCapture);
virtual bool InitCaptureFrameBufferFast(uint32 bufferWidth, uint32 bufferHeight);
virtual void CloseCaptureFrameBufferFast(void);
virtual void CaptureFrameBufferCallBack(void);
virtual void ReleaseHWShaders() {}
virtual void PrintResourcesLeaks() {}
//misc
virtual bool ScreenShot(const char* filename = NULL, int width = 0);
virtual void Set2DMode([[maybe_unused]] uint32 orthoX, [[maybe_unused]] uint32 orthoY, [[maybe_unused]] TransformationMatrices& backupMatrices, [[maybe_unused]] float znear = -1e10f, [[maybe_unused]] float zfar = 1e10f) {}
virtual void Unset2DMode([[maybe_unused]] const TransformationMatrices& restoringMatrices) {}
virtual void Set2DModeNonZeroTopLeft([[maybe_unused]] float orthoLeft, [[maybe_unused]] float orthoTop, [[maybe_unused]] float orthoWidth, [[maybe_unused]] float orthoHeight, [[maybe_unused]] TransformationMatrices& backupMatrices, [[maybe_unused]] float znear = -1e10f, [[maybe_unused]] float zfar = 1e10f) {}
virtual int ScreenToTexture(int nTexID);
virtual void DrawPoints([[maybe_unused]] Vec3 v[], [[maybe_unused]] int nump, [[maybe_unused]] ColorF& col, [[maybe_unused]] int flags) {};
virtual void DrawLines([[maybe_unused]] Vec3 v[], [[maybe_unused]] int nump, [[maybe_unused]] ColorF& col, [[maybe_unused]] int flags, [[maybe_unused]] float fGround) {};
virtual void RefreshSystemShaders() {}
// Shaders/Shaders support
// RE - RenderElement
virtual void EF_Release(int nFlags);
virtual void FX_PipelineShutdown(bool bFastShutdown = false);
//==========================================================
// external interface for shaders
//==========================================================
virtual bool EF_SetLightHole(Vec3 vPos, Vec3 vNormal, int idTex, float fScale = 1.0f, bool bAdditive = true);
// Draw all shaded REs in the list
virtual void EF_EndEf3D (const int nFlags, const int nPrecacheUpdateId, const int nNearPrecacheUpdateId, const SRenderingPassInfo& passInfo);
// 2d interface for shaders
virtual void EF_EndEf2D(const bool bSort);
virtual bool EF_PrecacheResource(SShaderItem* pSI, float fMipFactor, float fTimeToReady, int Flags, int nUpdateId, int nCounter);
virtual bool EF_PrecacheResource(ITexture* pTP, float fDist, float fTimeToReady, int Flags, int nUpdateId, int nCounter);
virtual void PrecacheResources();
virtual void PostLevelLoading() {}
virtual void PostLevelUnload() {}
virtual ITexture* EF_CreateCompositeTexture(int type, const char* szName, int nWidth, int nHeight, int nDepth, int nMips, int nFlags, ETEX_Format eTF, const STexComposition* pCompositions, size_t nCompositions, int8 nPriority = -1);
void EF_Init();
virtual IDynTexture* MakeDynTextureFromShadowBuffer(int nSize, IDynTexture* pDynTexture);
virtual void MakeSprite(IDynTexture*& rTexturePtr, float _fSpriteDistance, int nTexSize, float angle, float angle2, IStatObj* pStatObj, const float fBrightnessMultiplier, SRendParams& rParms);
virtual uint32 RenderOccludersIntoBuffer([[maybe_unused]] const CCamera& viewCam, [[maybe_unused]] int nTexSize, [[maybe_unused]] PodArray<IRenderNode*>& lstOccluders, [[maybe_unused]] float* pBuffer) { return 0; }
virtual IRenderAuxGeom* GetIRenderAuxGeom([[maybe_unused]] void* jobID = 0)
{
return m_pNULLRenderAuxGeom;
}
virtual IColorGradingController* GetIColorGradingController();
virtual IStereoRenderer* GetIStereoRenderer();
virtual ITexture* Create2DTexture(const char* name, int width, int height, int numMips, int flags, unsigned char* data, ETEX_Format format);
//////////////////////////////////////////////////////////////////////
// Replacement functions for the Font engine ( vlad: for font can be used old functions )
virtual bool FontUploadTexture(class CFBitmap*, ETEX_Format eTF = eTF_R8G8B8A8);
virtual int FontCreateTexture(int Width, int Height, byte* pData, ETEX_Format eTF = eTF_R8G8B8A8, bool genMips = FontCreateTextureGenMipsDefaultValue, const char* textureName = nullptr);
virtual bool FontUpdateTexture(int nTexId, int X, int Y, int USize, int VSize, byte* pData);
virtual void FontReleaseTexture(class CFBitmap* pBmp);
virtual void FontSetTexture(class CFBitmap*, int nFilterMode);
virtual void FontSetTexture(int nTexId, int nFilterMode);
virtual void FontSetRenderingState([[maybe_unused]] bool overrideViewProjMatrices, [[maybe_unused]] TransformationMatrices& backupMatrices) {}
virtual void FontSetBlending([[maybe_unused]] int src, [[maybe_unused]] int dst, [[maybe_unused]] int baseState) {}
virtual void FontRestoreRenderingState([[maybe_unused]] bool overrideViewProjMatrices, [[maybe_unused]] const TransformationMatrices& restoringMatrices) {}
virtual void GetLogVBuffers(void) {}
virtual void RT_PresentFast() {}
virtual void RT_ForceSwapBuffers() {}
virtual void RT_SwitchToNativeResolutionBackbuffer([[maybe_unused]] bool resolveBackBuffer) {}
virtual void RT_BeginFrame() {}
virtual void RT_EndFrame() {}
virtual void RT_Init() {}
virtual void RT_ShutDown([[maybe_unused]] uint32 nFlags) {}
virtual bool RT_CreateDevice() { return true; }
virtual void RT_Reset() {}
virtual void RT_SetCull([[maybe_unused]] int nMode) {}
virtual void RT_SetScissor([[maybe_unused]] bool bEnable, [[maybe_unused]] int x, [[maybe_unused]] int y, [[maybe_unused]] int width, [[maybe_unused]] int height){}
virtual void RT_RenderScene([[maybe_unused]] int nFlags, [[maybe_unused]] SThreadInfo& TI, [[maybe_unused]] RenderFunc pRenderFunc) {}
virtual void RT_PrepareStereo([[maybe_unused]] int mode, [[maybe_unused]] int output) {}
virtual void RT_CopyToStereoTex([[maybe_unused]] int channel) {}
virtual void RT_UpdateTrackingStates() {}
virtual void RT_DisplayStereo() {}
virtual void RT_SetCameraInfo() {}
virtual void RT_SetStereoCamera() {}
virtual void RT_ReadFrameBuffer([[maybe_unused]] unsigned char* pRGB, [[maybe_unused]] int nImageX, [[maybe_unused]] int nSizeX, [[maybe_unused]] int nSizeY, [[maybe_unused]] ERB_Type eRBType, [[maybe_unused]] bool bRGBA, [[maybe_unused]] int nScaledX, [[maybe_unused]] int nScaledY) {}
virtual void RT_RenderScene([[maybe_unused]] int nFlags, [[maybe_unused]] SThreadInfo& TI, [[maybe_unused]] int nR, [[maybe_unused]] RenderFunc pRenderFunc) {};
virtual void RT_CreateResource([[maybe_unused]] SResourceAsync* Res) {};
virtual void RT_ReleaseResource([[maybe_unused]] SResourceAsync* Res) {};
virtual void RT_ReleaseRenderResources() {};
virtual void RT_UnbindResources() {};
virtual void RT_UnbindTMUs() {};
virtual void RT_PrecacheDefaultShaders() {};
virtual void RT_CreateRenderResources() {};
virtual void RT_ClearTarget([[maybe_unused]] ITexture* pTex, [[maybe_unused]] const ColorF& color) {};
virtual void RT_RenderDebug([[maybe_unused]] bool bRenderStats = true) {};
virtual HRESULT RT_CreateVertexBuffer([[maybe_unused]] UINT Length, [[maybe_unused]] DWORD Usage, [[maybe_unused]] DWORD FVF, [[maybe_unused]] UINT Pool, [[maybe_unused]] void** ppVertexBuffer, [[maybe_unused]] HANDLE* pSharedHandle) { return S_OK; }
virtual HRESULT RT_CreateIndexBuffer([[maybe_unused]] UINT Length, [[maybe_unused]] DWORD Usage, [[maybe_unused]] DWORD Format, [[maybe_unused]] UINT Pool, [[maybe_unused]] void** ppVertexBuffer, [[maybe_unused]] HANDLE* pSharedHandle) { return S_OK; };
virtual HRESULT RT_CreateVertexShader([[maybe_unused]] DWORD* pBuf, [[maybe_unused]] void** pShader, [[maybe_unused]] void* pInst) { return S_OK; };
virtual HRESULT RT_CreatePixelShader([[maybe_unused]] DWORD* pBuf, [[maybe_unused]] void** pShader) { return S_OK; };
virtual void RT_ReleaseVBStream([[maybe_unused]] void* pVB, [[maybe_unused]] int nStream) {};
virtual void RT_DrawDynVB([[maybe_unused]] int Pool, [[maybe_unused]] uint32 nVerts) {}
virtual void RT_DrawDynVB([[maybe_unused]] SVF_P3F_C4B_T2F* pBuf, [[maybe_unused]] uint16* pInds, [[maybe_unused]] uint32 nVerts, [[maybe_unused]] uint32 nInds, [[maybe_unused]] const PublicRenderPrimitiveType nPrimType) {}
virtual void RT_DrawDynVBUI([[maybe_unused]] SVF_P2F_C4B_T2F_F4B* pBuf, [[maybe_unused]] uint16* pInds, [[maybe_unused]] uint32 nVerts, [[maybe_unused]] uint32 nInds, [[maybe_unused]] const PublicRenderPrimitiveType nPrimType) {}
virtual void RT_DrawStringU([[maybe_unused]] IFFont_RenderProxy* pFont, [[maybe_unused]] float x, [[maybe_unused]] float y, [[maybe_unused]] float z, [[maybe_unused]] const char* pStr, [[maybe_unused]] const bool asciiMultiLine, [[maybe_unused]] const STextDrawContext& ctx) const {}
virtual void RT_DrawLines([[maybe_unused]] Vec3 v[], [[maybe_unused]] int nump, [[maybe_unused]] ColorF& col, [[maybe_unused]] int flags, [[maybe_unused]] float fGround) {}
virtual void RT_Draw2dImage([[maybe_unused]] float xpos, [[maybe_unused]] float ypos, [[maybe_unused]] float w, [[maybe_unused]] float h, [[maybe_unused]] CTexture* pTexture, [[maybe_unused]] float s0, [[maybe_unused]] float t0, [[maybe_unused]] float s1, [[maybe_unused]] float t1, [[maybe_unused]] float angle, [[maybe_unused]] DWORD col, [[maybe_unused]] float z) {}
virtual void RT_Push2dImage([[maybe_unused]] float xpos, [[maybe_unused]] float ypos, [[maybe_unused]] float w, [[maybe_unused]] float h, [[maybe_unused]] CTexture* pTexture, [[maybe_unused]] float s0, [[maybe_unused]] float t0, [[maybe_unused]] float s1, [[maybe_unused]] float t1, [[maybe_unused]] float angle, [[maybe_unused]] DWORD col, [[maybe_unused]] float z, [[maybe_unused]] float stereoDepth) {}
virtual void RT_Draw2dImageList() {}
virtual void RT_Draw2dImageStretchMode([[maybe_unused]] bool bStretch) {}
virtual void RT_DrawImageWithUV([[maybe_unused]] float xpos, [[maybe_unused]] float ypos, [[maybe_unused]] float z, [[maybe_unused]] float w, [[maybe_unused]] float h, [[maybe_unused]] int texture_id, [[maybe_unused]] float* s, [[maybe_unused]] float* t, [[maybe_unused]] DWORD col, [[maybe_unused]] bool filtered = true) {}
virtual void EF_ClearTargetsImmediately([[maybe_unused]] uint32 nFlags) {}
virtual void EF_ClearTargetsImmediately([[maybe_unused]] uint32 nFlags, [[maybe_unused]] const ColorF& Colors, [[maybe_unused]] float fDepth, [[maybe_unused]] uint8 nStencil) {}
virtual void EF_ClearTargetsImmediately([[maybe_unused]] uint32 nFlags, [[maybe_unused]] const ColorF& Colors) {}
virtual void EF_ClearTargetsImmediately([[maybe_unused]] uint32 nFlags, [[maybe_unused]] float fDepth, [[maybe_unused]] uint8 nStencil) {}
virtual void EF_ClearTargetsLater([[maybe_unused]] uint32 nFlags) {}
virtual void EF_ClearTargetsLater([[maybe_unused]] uint32 nFlags, [[maybe_unused]] const ColorF& Colors, [[maybe_unused]] float fDepth, [[maybe_unused]] uint8 nStencil) {}
virtual void EF_ClearTargetsLater([[maybe_unused]] uint32 nFlags, [[maybe_unused]] const ColorF& Colors) {}
virtual void EF_ClearTargetsLater([[maybe_unused]] uint32 nFlags, [[maybe_unused]] float fDepth, [[maybe_unused]] uint8 nStencil) {}
virtual void RT_PushRenderTarget([[maybe_unused]] int nTarget, [[maybe_unused]] CTexture* pTex, [[maybe_unused]] SDepthTexture* pDS, [[maybe_unused]] int nS) {};
virtual void RT_PopRenderTarget([[maybe_unused]] int nTarget) {};
virtual void RT_SetViewport([[maybe_unused]] int x, [[maybe_unused]] int y, [[maybe_unused]] int width, [[maybe_unused]] int height, [[maybe_unused]] int id) {};
virtual void RT_SetRendererCVar([[maybe_unused]] ICVar* pCVar, [[maybe_unused]] const char* pArgText, [[maybe_unused]] const bool bSilentMode = false) {};
virtual void SetRendererCVar([[maybe_unused]] ICVar* pCVar, [[maybe_unused]] const char* pArgText, [[maybe_unused]] const bool bSilentMode = false) {};
virtual void SetMatrices([[maybe_unused]] float* pProjMat, [[maybe_unused]] float* pViewMat) {}
virtual void PushProfileMarker([[maybe_unused]] const char* label) {}
virtual void PopProfileMarker([[maybe_unused]] const char* label) {}
virtual void RT_InsertGpuCallback([[maybe_unused]] uint32 context, [[maybe_unused]] GpuCallbackFunc callback) {}
virtual void EnablePipelineProfiler([[maybe_unused]] bool bEnable) {}
virtual IOpticsElementBase* CreateOptics([[maybe_unused]] EFlareType type) const { return NULL; }
virtual bool BakeMesh([[maybe_unused]] const SMeshBakingInputParams* pInputParams, [[maybe_unused]] SMeshBakingOutput* pReturnValues) { return false; }
virtual PerInstanceConstantBufferPool* GetPerInstanceConstantBufferPoolPointer() override { return nullptr; }
IDynTexture* CreateDynTexture2(uint32 nWidth, uint32 nHeight, uint32 nTexFlags, const char* szSource, ETexPool eTexPool) override;
#ifdef SUPPORT_HW_MOUSE_CURSOR
virtual IHWMouseCursor* GetIHWMouseCursor() { return NULL; }
#endif
virtual void StartLoadtimePlayback([[maybe_unused]] ILoadtimeCallback* pCallback) {}
virtual void StopLoadtimePlayback() {}
void BeginProfilerSection([[maybe_unused]] const char* name, [[maybe_unused]] uint32 eProfileLabelFlags = 0) override {}
void EndProfilerSection([[maybe_unused]] const char* name) override {}
void AddProfilerLabel([[maybe_unused]] const char* name) override {}
void RT_DrawVideoRenderer([[maybe_unused]] AZ::VideoRenderer::IVideoRenderer* pVideoRenderer, [[maybe_unused]] const AZ::VideoRenderer::DrawArguments& drawArguments) override {}
private:
CNULLRenderAuxGeom* m_pNULLRenderAuxGeom;
IColorGradingController* m_pNULLColorGradingController;
IStereoRenderer* m_pNULLStereoRenderer;
};
//=============================================================================
extern CNULLRenderer* gcpNULL;