8#define GLFW_INCLUDE_VULKAN
11#include <ext/vulkan/spirv/GlslangToSpv.h>
12#include <ext/vulkan/svs/thsvs_simpler_vulkan_synchronization.h>
13#include <ext/vulkan/vma/src/VmaUsage.h>
18#include <unordered_map>
19#include <unordered_set>
34#if defined(CPU_64BIT) && defined(_MSC_VER)
35 #include <ext/windows-msc/uint128_t/uint128_t.h>
41using std::unordered_map;
42using std::unordered_set;
61 #define SAMPLER_HASH_MAX 8
63 #define SAMPLER_HASH_TYPE uint128_t
64 struct UINT128_T_Hash {
65 std::size_t operator()(uint128_t m)
const {
66 std::hash<uint64_t> hashVal;
67 return hashVal(m.lower() + m.upper());
71 #define SAMPLER_HASH_TYPE __int128
74 #define SAMPLER_HASH_MAX 4
75 #define SAMPLER_HASH_TYPE uint64_t
125 VkBuffer
buf { VK_NULL_HANDLE };
151 array<uniform_buffer_type_buffer, COMMANDS_MAX_GRAPHICS * DRAW_COMMANDBUFFER_MAX * 5>
buffers;
187 VkShaderModule
module { VK_NULL_HANDLE };
208 #if defined(CPU_64BIT) && defined(_MSC_VER)
236 array<ThsvsAccessType, 2>
accessTypes { THSVS_ACCESS_NONE, THSVS_ACCESS_NONE };
237 ThsvsImageLayout
svsLayout { THSVS_IMAGE_LAYOUT_GENERAL };
238 VkImageLayout
vkLayout { VK_IMAGE_LAYOUT_UNDEFINED };
254 { THSVS_ACCESS_NONE, THSVS_ACCESS_NONE },
255 { THSVS_ACCESS_NONE, THSVS_ACCESS_NONE },
256 { THSVS_ACCESS_NONE, THSVS_ACCESS_NONE },
257 { THSVS_ACCESS_NONE, THSVS_ACCESS_NONE },
258 { THSVS_ACCESS_NONE, THSVS_ACCESS_NONE },
259 { THSVS_ACCESS_NONE, THSVS_ACCESS_NONE }
261 ThsvsImageLayout
svsLayout { THSVS_IMAGE_LAYOUT_OPTIMAL };
262 VkImageLayout
vkLayout { VK_IMAGE_LAYOUT_UNDEFINED };
264 VkImageView
view { VK_NULL_HANDLE };
303 array<ThsvsAccessType, 2>
accessTypes { THSVS_ACCESS_NONE, THSVS_ACCESS_NONE };
304 ThsvsImageLayout
svsLayout { THSVS_IMAGE_LAYOUT_OPTIMAL };
306 VkImageView
view { VK_NULL_HANDLE };
347 VK_NULL_HANDLE, VK_NULL_HANDLE, VK_NULL_HANDLE, VK_NULL_HANDLE,
348 VK_NULL_HANDLE, VK_NULL_HANDLE, VK_NULL_HANDLE, VK_NULL_HANDLE,
349 VK_NULL_HANDLE, VK_NULL_HANDLE
356 array<uint32_t, 10>
boundBufferSizes { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
361 VkImageView
view { VK_NULL_HANDLE };
362 VkImageLayout
layout { VK_IMAGE_LAYOUT_UNDEFINED };
418 array<buffer_object_type*, BUFFERS_MAX + 1>
buffers;
460 VkCullModeFlagBits
cullMode { VK_CULL_MODE_FRONT_BIT};
489 VkBool32
checkLayers(uint32_t checkCount,
const char **checkNames,
const vector<VkLayerProperties>& instanceLayers);
490 void setImageLayout(
int contextIdx, texture_type* textureObject,
const array<ThsvsAccessType,2>& nextAccessTypes, ThsvsImageLayout nextLayout,
bool discardContent, uint32_t baseMipLevel = 0, uint32_t levelCount = 1,
bool submit =
true);
492 image_layout_change& imageLayoutChange,
493 texture_type* textureObject,
494 const array<ThsvsAccessType,2>& prevAccessTypes,
495 const array<ThsvsAccessType,2>& nextAccessTypes,
496 ThsvsImageLayout prevLayout,
497 ThsvsImageLayout nextLayout,
499 uint32_t baseMipLevel = 0,
500 uint32_t levelCount = 1
502 void applyImageLayoutChange(
int contextIdx,
const image_layout_change& imageLayoutChange, texture_type* textureObject,
bool submit =
true);
503 void applyImageLayoutChanges(
int contextIdx,
const array<image_layout_change, 8> imageLayoutChanges, array<texture_type*, 8> textureObjects,
bool submit =
true);
504 void setImageLayout2(
int contextIdx, texture_type* textureObject,
const array<ThsvsAccessType,2>& accessTypes,
const array<ThsvsAccessType,2>& nextAccessTypes, ThsvsImageLayout layout, ThsvsImageLayout nextLayout,
bool discardContent, uint32_t baseMipLevel, uint32_t levelCount, uint32_t baseArrayLayer, uint32_t layerCount,
bool updateTextureObject);
505 void setImageLayout3(
int contextIdx, VkImage image, VkImageAspectFlags aspectMask,
const array<ThsvsAccessType,2>& accessTypes,
const array<ThsvsAccessType,2>& nextAccessTypes, ThsvsImageLayout layout, ThsvsImageLayout nextLayout);
507 void prepareTextureImage(
int contextIdx,
struct texture_type* textureObject, VkImageTiling tiling, VkImageUsageFlags usage, VkFlags requiredFlags,
Texture* texture,
const array<ThsvsAccessType,2>& nextAccesses, ThsvsImageLayout imageLayout,
bool disableMipMaps =
true, uint32_t baseLevel = 0, uint32_t levelCount = 1);
509 void createBuffer(VkDeviceSize size, VkBufferUsageFlags usage, VkMemoryPropertyFlags properties, VkBuffer& buffer, VmaAllocation& allocation, VmaAllocationInfo& allocationInfo);
511 void vmaMemCpy(VmaAllocation allocationDst,
const uint8_t* src, uint32_t size, uint32_t offset = 0);
512 void uploadBufferObjectInternal(
int contextIdx, buffer_object_type* buffer, int32_t size,
const uint8_t* data, VkBufferUsageFlagBits usage);
513 void uploadBufferObjectInternal(
int contextIdx, int32_t bufferObjectId, int32_t size,
const uint8_t* data, VkBufferUsageFlagBits usage);
518 VkPipeline
getPipelineInternal(
int contextIdx, program_type* programm, uint64_t framebuffePipelineId, uint32_t pipelineIdx);
546 void createDepthBufferTexture(int32_t textureId, int32_t width, int32_t height, int32_t cubeMapTextureId, int32_t cubeMapTextureIndex);
547 void createBufferTexture(int32_t textureId, int32_t width, int32_t height, int32_t cubeMapTextureId, int32_t cubeMapTextureIndex, VkFormat format);
551 VkCommandBuffer
endDrawCommandBuffer(
int contextIdx,
int bufferId = -1,
bool cycleBuffers =
true);
585 int32_t
loadShader(int32_t type,
const string& pathName,
const string& fileName,
const string& definitions =
string(),
const string& functions =
string())
override;
586 void useProgram(
int contextIdx, int32_t programId)
override;
600 void setViewPort(int32_t width, int32_t height)
override;
602 void setClearColor(
float red,
float green,
float blue,
float alpha)
override;
605 void setFrontFace(
int contextIdx, int32_t frontFace)
override;
615 void setColorMask(
bool red,
bool green,
bool blue,
bool alpha)
override;
616 void clear(int32_t mask)
override;
618 int32_t
createDepthBufferTexture(int32_t width, int32_t height, int32_t cubeMapTextureId, int32_t cubeMapTextureIndex)
override;
619 int32_t
createColorBufferTexture(int32_t width, int32_t height, int32_t cubeMapTextureId, int32_t cubeMapTextureIndex)
override;
629 void bindTexture(
int contextIdx, int32_t textureId)
override;
632 int32_t
createFramebufferObject(int32_t depthBufferTextureId, int32_t colorBufferTextureId, int32_t cubeMapTextureId = 0, int32_t cubeMapTextureIndex = 0)
override;
634 int32_t depthBufferTextureId,
635 int32_t geometryBufferTextureId1,
636 int32_t geometryBufferTextureId2,
637 int32_t geometryBufferTextureId3,
638 int32_t colorBufferTextureId1,
639 int32_t colorBufferTextureId2,
640 int32_t colorBufferTextureId3,
641 int32_t colorBufferTextureId4,
642 int32_t colorBufferTextureId5
646 vector<int32_t>
createBufferObjects(int32_t bufferCount,
bool useGPUMemory,
bool shared)
override;
681 void dispatchCompute(
int contextIdx, int32_t numNodesX, int32_t numNodesY, int32_t numNodesZ)
override;
696 void setTextureUnit(
int contextIdx, int32_t textureUnit)
override;
TDME2 engine entity shader parameters.
GL3/Core -> Vulkan shader program.
void setClearColor(float red, float green, float blue, float alpha) override
Set up clear color.
void prepareTextureImage(int contextIdx, struct texture_type *textureObject, VkImageTiling tiling, VkImageUsageFlags usage, VkFlags requiredFlags, Texture *texture, const array< ThsvsAccessType, 2 > &nextAccesses, ThsvsImageLayout imageLayout, bool disableMipMaps=true, uint32_t baseLevel=0, uint32_t levelCount=1)
void enableDepthBufferWriting() override
Enable depth buffer writing.
const string getShaderVersion() override
void unsetPipeline(int contextIdx)
void bindSpriteSheetDimensionBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind sprite sheet dimension buffer object.
VkColorSpaceKHR windowColorSpace
void bindTexture(int contextIdx, int32_t textureId) override
Binds a texture with given id or unbinds when using ID_NONE.
uint32_t currentWindowFramebufferIdx
void clear(int32_t mask) override
Clear render buffer with given mask.
void createSkinningComputingProgram(program_type *program)
static constexpr int POINTS_VERTEX_BUFFER_COUNT
void bindTangentsBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind tangents buffer object.
void disposeBufferObjects(vector< int32_t > &bufferObjectIds) override
Disposes a frame buffer object.
void invalidateTextureDescriptorCaches(int textureId)
int32_t getTextureUnit(int contextIdx) override
Get texture unit.
VkSwapchainKHR windowSwapchain
VKRenderer()
Protected constructor.
void setProgramUniformFloatMatrix3x3(int contextIdx, int32_t uniformId, const array< float, 9 > &data) override
Set up a float matrix 3x3 uniform value.
VkPhysicalDeviceProperties gpuProperties
void doneGuiMode() override
Set up renderer for 3d rendering.
static constexpr int DESC_MAX_UNCACHED
void setColorMask(bool red, bool green, bool blue, bool alpha) override
Set up GL rendering colormask.
void bindTextureCoordinatesBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind texture coordinates buffer object.
void submitDrawCommandBuffers(int commandBufferCount, VkCommandBuffer *commandBuffers, VkFence &fence)
void setImageLayout2(int contextIdx, texture_type *textureObject, const array< ThsvsAccessType, 2 > &accessTypes, const array< ThsvsAccessType, 2 > &nextAccessTypes, ThsvsImageLayout layout, ThsvsImageLayout nextLayout, bool discardContent, uint32_t baseMipLevel, uint32_t levelCount, uint32_t baseArrayLayer, uint32_t layerCount, bool updateTextureObject)
void bindSkinningVertexJointWeightsBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind skinning vertex joint weights buffer object.
bool isGLCLAvailable() override
vector< delete_buffer_type > deleteBuffers
static constexpr int PROGRAMS_MAX
void attachShaderToProgram(int32_t programId, int32_t shaderId) override
Attaches a shader to a program.
void setupObjectsRenderingPipeline(int contextIdx, program_type *program)
void dispatchCompute(int contextIdx, int32_t numNodesX, int32_t numNodesY, int32_t numNodesZ) override
Dispatch compute.
void setFrontFace(int contextIdx, int32_t frontFace) override
Set up clock wise or counter clock wise faces as front face.
void setTextureUnit(int contextIdx, int32_t textureUnit) override
Sets up texture unit.
buffer_object_type * emptyVertexBuffer
void drawLinesFromBufferObjects(int contextIdx, int32_t points, int32_t pointsOffset) override
Draw lines from buffer objects.
VkDescriptorPool descriptorPool2
void createBuffer(VkDeviceSize size, VkBufferUsageFlags usage, VkMemoryPropertyFlags properties, VkBuffer &buffer, VmaAllocation &allocation, VmaAllocationInfo &allocationInfo)
void createLinesRenderingPipeline(int contextIdx, program_type *program)
void disableBlending() override
Disables blending.
PFN_vkDestroySwapchainKHR fpDestroySwapchainKHR
void setProgramAttributeLocation(int32_t programId, int32_t location, const string &name) override
Bind attribute to a input location.
VkBool32 checkLayers(uint32_t checkCount, const char **checkNames, const vector< VkLayerProperties > &instanceLayers)
void setViewPort(int32_t width, int32_t height) override
Set up viewport parameter.
uint64_t framebufferPipelinesId
PFN_vkAcquireNextImageKHR fpAcquireNextImageKHR
bool isSupportingMultithreadedRendering() override
VkCullModeFlagBits cullMode
int32_t getTextureUnits() override
void bindSkinningVerticesResultBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind skinning vertices result buffer object.
void setProgramUniformFloat(int contextIdx, int32_t uniformId, float value) override
Set up a float uniform value.
const string getRenderer() override
const Renderer_Statistics getStatistics() override
void uploadCubeMapSingleTexture(int contextIdx, texture_type *cubemapTextureType, Texture *texture, uint32_t baseArrayLayer)
void initialize() override
Initialize renderer.
static constexpr int COMMANDS_MAX_COMPUTE
void setVSync(bool vSync) override
Enable/Disable v-sync.
vector< int32_t > disposeBuffers
int32_t createGBufferColorTexture(int32_t width, int32_t height) override
Creates a geometry buffer color RGBA texture.
PFN_vkCreateSwapchainKHR fpCreateSwapchainKHR
unordered_map< int32_t, shader_type * > shaders
vector< int32_t > freeTextureIds
uint16_t createPipelineIndex(program_type *program, int contextIdx)
void setProgramUniformFloatVec3(int contextIdx, int32_t uniformId, const array< float, 3 > &data) override
Set up a float vec3 uniform value.
bool isSupportingIntegerProgramAttributes() override
static constexpr int SHADERS_COMPUTE_MAX
bool isBufferObjectsAvailable() override
Checks if buffer objects is available.
void disposeFrameBufferObject(int32_t frameBufferId) override
Disposes a frame buffer object.
const string getVendor() override
void uploadBufferObject(int contextIdx, int32_t bufferObjectId, int32_t size, FloatBuffer *data) override
Uploads buffer data to buffer object.
void uploadBufferObjectInternal(int contextIdx, buffer_object_type *buffer, int32_t size, const uint8_t *data, VkBufferUsageFlagBits usage)
void setProgramUniformInternal(int contextIdx, int32_t uniformId, uint8_t *data, int32_t size)
void memoryBarrier() override
Memory barrier.
void createBufferTexture(int32_t textureId, int32_t width, int32_t height, int32_t cubeMapTextureId, int32_t cubeMapTextureIndex, VkFormat format)
void setupSkinningComputingPipeline(int contextIdx, program_type *program)
void setProgramUniformInteger(int contextIdx, int32_t uniformId, int32_t value) override
Set up a integer uniform value.
int32_t getProgramUniformLocation(int32_t programId, const string &name) override
Returns location of given uniform variable.
void disableDepthBufferWriting() override
Disable depth buffer writing.
SpinLock pipelinesSpinLock
void createRenderProgram(program_type *program)
void setImageLayout(int contextIdx, texture_type *textureObject, const array< ThsvsAccessType, 2 > &nextAccessTypes, ThsvsImageLayout nextLayout, bool discardContent, uint32_t baseMipLevel=0, uint32_t levelCount=1, bool submit=true)
void bindSkinningVertexJointIdxsBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind skinning vertex joint indices buffer object.
void invalidatePipelines()
void applyImageLayoutChange(int contextIdx, const image_layout_change &imageLayoutChange, texture_type *textureObject, bool submit=true)
void bindNormalsBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind normals buffer object.
int whiteTextureSampler2dDefaultId
void drawPointsFromBufferObjects(int contextIdx, int32_t points, int32_t pointsOffset) override
Draw points from buffer objects.
void vmaMemCpy(VmaAllocation allocationDst, const uint8_t *src, uint32_t size, uint32_t offset=0)
void disposeTexture(int32_t textureId) override
Dispose a texture.
int32_t createColorBufferTexture(int32_t width, int32_t height, int32_t cubeMapTextureId, int32_t cubeMapTextureIndex) override
Creates a color buffer texture.
void disableCulling(int contextIdx) override
Disable culling.
VkBuffer getBindBufferObjectInternal(int32_t bufferObjectId, uint32_t &size)
PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR fpGetPhysicalDeviceSurfaceCapabilitiesKHR
static constexpr int SHADERS_MAX
void bindEffectColorMulsBufferObject(int contextIdx, int32_t bufferObjectId, int32_t divisor) override
Bind effect color muls buffer object.
int32_t createCubeMapTexture(int contextIdx, int32_t width, int32_t height) override
Create cube map texture from frame buffers.
static constexpr int COMMANDS_MAX_GRAPHICS
void bindCubeMapTexture(int contextIdx, int32_t textureId) override
Binds a cube map texture with given id or unbinds when using ID_NONE.
bool isPBRAvailable() override
VkSemaphore drawCompleteSemaphore
framebuffer_pipelines_type * framebufferPipelinesCache
void setProgramUniformFloatVec4(int contextIdx, int32_t uniformId, const array< float, 4 > &data) override
Set up a float vec4 uniform value.
void setDepthFunction(int32_t depthFunction) override
Set up depth function.
void uploadCubeMapTexture(int contextIdx, Texture *textureLeft, Texture *textureRight, Texture *textureTop, Texture *textureBottom, Texture *textureFront, Texture *textureBack) override
Uploads cube map texture data to current bound texture.
uint32_t graphicsQueueNodeIndex
void bindFrameBuffer(int32_t frameBufferId) override
Enables a framebuffer to be rendered.
static constexpr bool VERBOSE
void initializeRenderPass()
int32_t loadShader(int32_t type, const string &pathName, const string &fileName, const string &definitions=string(), const string &functions=string()) override
Loads a shader.
void initializeFrameBuffers()
bool isNormalMappingAvailable() override
static constexpr int DRAW_COMMANDBUFFER_MAX
vector< framebuffer_pipelines_type * > framebuffersPipelines
void createDepthStencilStateCreateInfo(VkPipelineDepthStencilStateCreateInfo &depthStencilStateCreateInfo)
bool isDepthTextureAvailable() override
Checks if depth texture is available.
void resizeDepthBufferTexture(int32_t textureId, int32_t width, int32_t height) override
Resizes a depth texture.
void resizeGBufferGeometryTexture(int32_t textureId, int32_t width, int32_t height) override
Resizes a geometry buffer geometry texture.
int whiteTextureSamplerCubeDefaultId
uint64_t createPipelineFramebufferId()
void finishFrame() override
Finish frame.
bool isInstancedRenderingAvailable() override
Checks if instanced rendering is available.
void drawTrianglesFromBufferObjects(int contextIdx, int32_t triangles, int32_t trianglesOffset) override
Draw triangles from buffer objects.
PFN_vkQueuePresentKHR fpQueuePresentKHR
vector< context_type > contexts
VmaAllocator vmaAllocator
static constexpr int TEXTUREUNITS_MAX
void endRenderPass(int contextIdx)
void startRenderPass(int contextIdx)
void createDepthBufferTexture(int32_t textureId, int32_t width, int32_t height, int32_t cubeMapTextureId, int32_t cubeMapTextureIndex)
bool isSpecularMappingAvailable() override
void setImageLayout3(int contextIdx, VkImage image, VkImageAspectFlags aspectMask, const array< ThsvsAccessType, 2 > &accessTypes, const array< ThsvsAccessType, 2 > &nextAccessTypes, ThsvsImageLayout layout, ThsvsImageLayout nextLayout)
void initGuiMode() override
Set up renderer for GUI rendering.
framebuffer_pipelines_type * createFramebufferPipelines(uint64_t framebufferPipelinesId)
void applyImageLayoutChanges(int contextIdx, const array< image_layout_change, 8 > imageLayoutChanges, array< texture_type *, 8 > textureObjects, bool submit=true)
void finishSetupCommandBuffer(int contextIdx)
void bindSkinningVertexJointsBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind skinning vertex joints buffer object.
void setCullFace(int32_t cullFace) override
Sets up which face will be culled.
vector< int32_t > createBufferObjects(int32_t bufferCount, bool useGPUMemory, bool shared) override
Generate buffer objects for vertex data and such.
void enableBlending() override
Enables blending.
void setupPointsRenderingPipeline(int contextIdx, program_type *program)
static constexpr int COMPUTE_STORAGE_BUFFER_COUNT
VkPresentModeKHR lastSwapchainPresentMode
void setupLinesRenderingPipeline(int contextIdx, program_type *program)
void createObjectsRenderingPipeline(int contextIdx, program_type *program)
void uploadIndicesBufferObject(int contextIdx, int32_t bufferObjectId, int32_t size, ShortBuffer *data) override
Uploads buffer data to buffer object.
VkPhysicalDeviceFeatures gpuFeatures
void drawInstancedTrianglesFromBufferObjects(int contextIdx, int32_t triangles, int32_t trianglesOffset, VkBuffer indicesBuffer, int32_t instances)
static constexpr int COMMANDS_MAX
bool linkProgram(int32_t programId) override
Links attached shaders to a program.
void setProgramUniformFloatMatrix4x4(int contextIdx, int32_t uniformId, const array< float, 16 > &data) override
Set up a float matrix 4x4 uniform value.
void enableCulling(int contextIdx) override
Enable culling.
static constexpr int CUBEMAPTEXTUREINDEX_MIN
int32_t boundFrameBufferId
vector< delete_image_type > deleteImages
PFN_vkGetPhysicalDeviceSurfacePresentModesKHR fpGetPhysicalDeviceSurfacePresentModesKHR
uint32_t windowSwapchainImageCount
vector< program_type * > programVector
bool beginDrawCommandBuffer(int contextIdx, int bufferId=-1)
void endDrawCommandsAllContexts()
array< buffer_object_type *, BUFFERS_MAX+1 > buffers
void bindOriginsBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind origins buffer object.
static constexpr int SHADERSSTAGES_MAX
int32_t createProgram(int type) override
Creates a shader program.
static constexpr int LINES_VERTEX_BUFFER_COUNT
void bindIndicesBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind indices buffer object.
VkDescriptorPool descriptorPool1
bool isComputeShaderAvailable() override
static constexpr int DESC_MAX_CACHED
void initializeFrame() override
Pre Frame Initialization.
int32_t createGBufferGeometryTexture(int32_t width, int32_t height) override
Creates a geometry buffer geometry texture.
void uploadSkinningBufferObject(int contextIdx, int32_t bufferObjectId, int32_t size, FloatBuffer *data) override
Upload skinning buffer object.
static constexpr int BUFFERS_MAX
void enableAdditionBlending() override
Enable blending with c = a + b.
framebuffer_pipelines_type * getFramebufferPipelines(uint64_t framebufferPipelinesId)
void bindVerticesBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind vertices buffer object.
texture_type * getBindTextureInternal(int32_t textureId)
vector< int32_t > freeBufferIds
void createRasterizationStateCreateInfo(int contextIdx, VkPipelineRasterizationStateCreateInfo &rasterizationStateCreateInfo)
void drawInstancedIndexedTrianglesFromBufferObjects(int contextIdx, int32_t triangles, int32_t trianglesOffset, int32_t instances) override
Draw instanced indexed triangles from buffer objects.
VkPhysicalDevice physicalDevice
BlendingMode blendingMode
PFN_vkGetSwapchainImagesKHR fpGetSwapchainImagesKHR
void useProgram(int contextIdx, int32_t programId) override
Use shader program.
void bindColorsBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind colors buffer object.
VkPresentModeKHR swapchainPresentMode
void bindPointSizesBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind point sizes buffer object.
void bindSkinningVerticesBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind skinning vertices buffer object.
void createColorBlendAttachmentState(VkPipelineColorBlendAttachmentState &blendAttachmentState)
void bindBitangentsBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind bitangents buffer object.
vector< VkPipeline > disposePipelines
void bindSkinningNormalsResultBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind skinning normals result buffer object.
void setProgramUniformFloatMatrices4x4(int contextIdx, int32_t uniformId, int32_t count, FloatBuffer *data) override
Set up a float matrices 4x4 uniform values.
void resizeGBufferColorTexture(int32_t textureId, int32_t width, int32_t height) override
Resizes a geometry buffer color RGBA texture.
void bindSkinningMatricesBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind skinning matrices result buffer object.
void initializeSwapChain()
int32_t createGeometryBufferObject(int32_t depthBufferTextureId, int32_t geometryBufferTextureId1, int32_t geometryBufferTextureId2, int32_t geometryBufferTextureId3, int32_t colorBufferTextureId1, int32_t colorBufferTextureId2, int32_t colorBufferTextureId3, int32_t colorBufferTextureId4, int32_t colorBufferTextureId5) override
Creates a geometry frame buffer object.
vector< window_frambuffer_buffer_type > windowFramebufferBuffers
void updateViewPort() override
Update viewport.
vector< VkFence > contextsDrawFences
void requestSubmitDrawBuffers(int contextIdx)
void createFramebufferObject(int32_t frameBufferId)
VkPipeline getPipelineInternal(int contextIdx, program_type *programm, uint64_t framebuffePipelineId, uint32_t pipelineIdx)
uint32_t getMipLevels(Texture *texture)
void bindModelMatricesBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind model matrices buffer object.
void createPointsRenderingPipeline(int contextIdx, program_type *program)
VkSemaphore imageAcquiredSemaphore
void drawIndexedTrianglesFromBufferObjects(int contextIdx, int32_t triangles, int32_t trianglesOffset) override
Draw indexed triangles from buffer objects.
void disableDepthBufferTest() override
Disable depth buffer test.
void bindSkinningNormalsBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind skinning normal buffer object.
void unbindBufferObjects(int contextIdx) override
Unbind buffer objects.
array< texture_type *, TEXTURES_MAX+1 > textures
uint32_t lastWindowFramebufferIdx
static constexpr int TEXTURES_MAX
VkPhysicalDeviceMemoryProperties memoryProperties
texture_type * getTextureInternal(int32_t textureId)
void bindEffectColorAddsBufferObject(int contextIdx, int32_t bufferObjectIdd, int32_t divisor) override
Bind effect color adds buffer object.
int32_t createTexture() override
Creates a texture.
vector< int32_t > disposeTextures
VkQueueFamilyProperties * queueProperties
float readPixelDepth(int32_t x, int32_t y) override
Reads a pixel depth.
void uploadTexture(int contextIdx, Texture *texture) override
Uploads texture data to current bound texture.
void getImageLayoutChange(image_layout_change &imageLayoutChange, texture_type *textureObject, const array< ThsvsAccessType, 2 > &prevAccessTypes, const array< ThsvsAccessType, 2 > &nextAccessTypes, ThsvsImageLayout prevLayout, ThsvsImageLayout nextLayout, bool discardContent, uint32_t baseMipLevel=0, uint32_t levelCount=1)
VkCommandBuffer endDrawCommandBuffer(int contextIdx, int bufferId=-1, bool cycleBuffers=true)
texture_type * whiteTextureSampler2dDefault
bool isUsingShortIndices() override
void setLineWidth(float lineWidth) override
Set line width.
ByteBuffer * readPixels(int32_t x, int32_t y, int32_t width, int32_t height) override
Read pixels.
void enableDepthBufferTest() override
Enable depth buffer test.
void resizeColorBufferTexture(int32_t textureId, int32_t width, int32_t height) override
Resize color buffer texture.
static constexpr int OBJECTS_VERTEX_BUFFER_COUNT
void bindTextureSpriteIndicesBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind texture and sprite indices buffer object.
void setProgramUniformFloatVec2(int contextIdx, int32_t uniformId, const array< float, 2 > &data) override
Set up a float vec2 uniform value.
void finishSetupCommandBuffers()
bool isDeferredShadingAvailable() override
PFN_vkGetPhysicalDeviceSurfaceFormatsKHR fpGetPhysicalDeviceSurfaceFormatsKHR
buffer_object_type * getBufferObjectInternal(int32_t bufferObjectId)
void prepareSetupCommandBuffer(int contextIdx)
texture_type * whiteTextureSamplerCubeDefault
PFN_vkGetPhysicalDeviceSurfaceSupportKHR fpGetPhysicalDeviceSurfaceSupportKHR
vector< framebuffer_object_type * > framebuffers
bool isUsingProgramAttributeLocation() override
Implementation for read/write lock.
Spin Lock implementation.
reusable_buffer * bindBuffer
vector< reusable_buffer * > frameFreeBuffers
reusable_buffer * currentBuffer
list< reusable_buffer > buffers
VkCommandBuffer drawCommand
array< VkDescriptorBufferInfo, TEXTUREUNITS_MAX+SHADERSSTAGES_MAX > descriptorBufferInfos
VkCommandBuffer setupCommandInUse
uint32_t currentCommandBuffer
unordered_set< int32_t > uploadedTextureIds
VkCommandPool setupCommandPool
int32_t activeTextureUnit
array< VkDeviceSize, 10 > boundBufferOffsets
array< bound_texture, TEXTUREUNITS_MAX > boundTextures
VkCommandBuffer setupCommand
array< command_buffer, DRAW_COMMANDBUFFER_MAX > commandBuffers
vector< VkBuffer > computeRenderBarrierBuffers
array< uint32_t, 10 > boundBufferSizes
array< VkDescriptorImageInfo, TEXTUREUNITS_MAX+SHADERSSTAGES_MAX > descriptorImageInfos
array< VkBuffer, 10 > boundBuffers
VkCommandPool drawCommandPool
VkBuffer boundIndicesBuffer
array< VkWriteDescriptorSet, TEXTUREUNITS_MAX+SHADERSSTAGES_MAX > descriptorWriteSets
int32_t gbufferGeometryBufferTextureId2
int32_t gbufferGeometryBufferTextureId1
int32_t gbufferColorBufferTextureId2
int32_t gbufferColorBufferTextureId4
int32_t gbufferColorBufferTextureId1
int32_t gbufferColorBufferTextureId5
int32_t cubemapTextureIndex
VkFramebuffer frameBuffer
int32_t gbufferColorBufferTextureId3
int32_t gbufferGeometryBufferTextureId3
int32_t depthBufferTextureId
array< VkPipeline, 32768 > pipelines
VkPipelineStageFlags dstStages
VkPipelineStageFlags srcStages
VkImageMemoryBarrier vkImageMemoryBarrier
array< ThsvsAccessType, 2 > accessTypes
ThsvsImageLayout svsLayout
uint32_t uboDescriptorSetsIdx
array< VkDescriptorSet, DESC_MAX_UNCACHED > texturesDescriptorSetsUncached
array< VkDescriptorSet, DESC_MAX_UNCACHED > uboDescriptorSets
uint32_t texturesDescriptorSetsIdxUncached
array< VkDescriptorSet, DESC_MAX_CACHED > descriptorSets2
unordered_map< SAMPLER_HASH_TYPE, int > texturesDescriptorSetsCache
array< command_buffer, DRAW_COMMANDBUFFER_MAX > commandBuffers
uint32_t descriptorSets2Idx
unordered_map< int32_t, unordered_set< SAMPLER_HASH_TYPE > > texturesDescriptorSetsCacheTextureIds
vector< uint32_t > freeTextureDescriptorSetsIds
unordered_map< int32_t, string > uniforms
vector< int32_t > shaderIds
vector< context > contexts
vector< shader_type * > shaders
VkPipelineLayout pipelineLayout
VkDescriptorSetLayout texturesDescriptorSetLayout
VkDescriptorSetLayout uboDescriptorSetLayout
unordered_map< string, uniform_type * > uniforms
vector< uniform_buffer_type > uniformBuffers
vector< attribute_layout > attributeLayouts
VkShaderStageFlagBits type
vector< uniform_type * > samplerUniformList
vector< uniform_type * > uniformList
VkImageAspectFlags aspectMask
array< array< ThsvsAccessType, 2 >, 6 > accessTypes
int32_t frameBufferObjectId
texture_type * bindTexture
texture_type * cubemapColorBuffer
int32_t cubemapTextureIndex
texture_type * cubemapDepthBuffer
texture_type * cubemapBufferTexture
image_layout_change frameBufferUnbindImageLayoutChange
ThsvsImageLayout svsLayout
image_layout_change frameBufferBindImageLayoutChange
VkFramebuffer framebuffer
array< ThsvsAccessType, 2 > accessTypes
ThsvsImageLayout svsLayout