12#include "../interpreter.h"
14#include <imgui_impl_sdl2.h>
33class RenderPassDescriptor;
34class RenderCommandEncoder;
40class RenderPipelineState;
41class ComputePipelineState;
56static size_t cantor(uint64_t a, uint64_t b) {
57 return (a + b) * (a + b + 1) / 2 + b;
62 size_t operator()(
const std::pair<uint64_t, uint32_t>& p)
const {
63 auto value1 = p.first;
64 auto value2 = p.second;
65 return cantor(value1, value2);
157 std::shared_ptr<Ship::ResourceManager> resourceManager =
nullptr);
173 void UploadTexture(
const uint8_t* rgba32Buf, uint32_t width, uint32_t height)
override;
179 void SetScissor(
int x,
int y,
int width,
int height)
override;
181 void DrawTriangles(
float buf_vbo[],
size_t buf_vbo_len,
size_t buf_vbo_num_tris)
override;
189 bool opengl_invertY,
bool render_target,
bool has_depth_buffer,
190 bool can_extract_depth)
override;
192 void CopyFramebuffer(
int fbDstId,
int fbSrcId,
int srcX0,
int srcY0,
int srcX1,
int srcY1,
int dstX0,
int dstY0,
193 int dstX1,
int dstY1)
override;
197 std::unordered_map<std::pair<float, float>, uint16_t,
hash_pair_ff>
198 GetPixelDepth(
int fb_id,
const std::set<std::pair<float, float>>& coordinates)
override;
218 bool NonUniformThreadGroupSupported();
219 void SetupScreenFramebuffer(uint32_t width, uint32_t height);
221 SDL_Renderer* mRenderer;
222 CA::MetalLayer* mLayer;
223 MTL::Device* mDevice;
224 MTL::CommandQueue* mCommandQueue;
225 MTL::CommandQueue* mReadbackQueue;
227 int mCurrentVertexBufferPoolIndex = 0;
232 std::vector<struct TextureDataMetal> mTextures;
233 std::vector<FramebufferMetal> mFramebuffers;
237 MTL::Buffer* mFrameUniformBuffer;
242 MTL::Buffer* mCoordUniformBuffer;
243 MTL::Buffer* mDepthValueOutputBuffer;
244 size_t mCoordBufferSize;
245 MTL::Function* mDepthComputeFunction;
246 MTL::Function* mConvertToRgb5a1Function;
247 MTL::ComputePipelineState* mConvertToRgb5a1PipelineState =
nullptr;
248 std::shared_ptr<Ship::ConsoleVariable> mConsoleVariable;
249 std::shared_ptr<Ship::ResourceManager> mResourceManager;
254 MTL::CommandBuffer* mScreenReadbackCmdBuf =
nullptr;
255 MTL::Buffer* mScreenReadbackBuffer =
nullptr;
256 uint32_t mScreenReadbackWidth = 0;
257 uint32_t mScreenReadbackHeight = 0;
258 bool mScreenReadbackDataReady =
false;
259 bool mScreenReadbackRequested =
false;
263 CA::MetalDrawable* mCurrentDrawable;
264 std::set<int> mDrawnFramebuffers;
265 NS::AutoreleasePool* mFrameAutoreleasePool;
270 int32_t mRenderTargetHeight;
271 int mCurrentFramebuffer;
272 size_t mCurrentVertexBufferOffset;
275 bool mNonUniformThreadgroupSupported;
Definition gfx_rendering_api.h:30
#define SHADER_MAX_TEXTURES
Definition interpreter.h:105
Definition gfx_direct3d_common.h:19
FilteringMode
Definition gfx_rendering_api.h:17
@ FILTER_THREE_POINT
Definition gfx_rendering_api.h:17
Core namespace for the libultraship engine framework.
Definition gfx_direct3d_common.h:14
Definition gfx_rendering_api.h:12
OpenGL shader program metadata cached by the Fast3D renderer.
Definition gfx_opengl.h:37
Metal texture object metadata tracked by the renderer cache.
Definition gfx_metal.h:90
MTL::SamplerState * sampler
Definition gfx_metal.h:93
uint32_t filtering
Definition gfx_metal.h:96
MTL::Texture * texture
Definition gfx_metal.h:91
uint32_t width
Definition gfx_metal.h:94
bool linear_filtering
Definition gfx_metal.h:97
uint32_t height
Definition gfx_metal.h:95
MTL::Texture * msaaTexture
Definition gfx_metal.h:92
Definition gfx_rendering_api.h:20
Hash functor for (shaderId, msaaLevel) pairs used by shader caches.
Definition gfx_metal.h:61
size_t operator()(const std::pair< uint64_t, uint32_t > &p) const
Definition gfx_metal.h:62