8 #define GLFW_INCLUDE_VULKAN
9 #include <GLFW/glfw3.h>
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>
42 using std::unordered_map;
43 using std::unordered_set;
61 #define TEXTUREDESCRIPTORSET_MAX_TEXTURES 8
63 std::size_t
operator()(
const tuple<uint16_t, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t>& k)
const {
64 std::hash<uint64_t> hashVal;
66 static_cast<uint64_t
>(get<0>(k)) ^ (
static_cast<uint64_t
>(get<1>(k)) << 16) ^ (
static_cast<uint64_t
>(get<2>(k)) << 32) ^ (
static_cast<uint64_t
>(get<3>(k)) << 48) ^
67 static_cast<uint64_t
>(get<4>(k)) ^ (
static_cast<uint64_t
>(get<5>(k)) << 16) ^ (
static_cast<uint64_t
>(get<6>(k)) << 32) ^ (
static_cast<uint64_t
>(get<7>(k)) << 48)
163 array<uniform_buffer_type_buffer, COMMANDS_MAX_GRAPHICS * DRAW_COMMANDBUFFER_MAX * 5>
buffers;
208 VkShaderModule
module { VK_NULL_HANDLE };
252 array<ThsvsAccessType, 2>
accessTypes { THSVS_ACCESS_NONE, THSVS_ACCESS_NONE };
253 ThsvsImageLayout
svsLayout { THSVS_IMAGE_LAYOUT_GENERAL };
254 VkImageLayout
vkLayout { VK_IMAGE_LAYOUT_UNDEFINED };
270 { THSVS_ACCESS_NONE, THSVS_ACCESS_NONE },
271 { THSVS_ACCESS_NONE, THSVS_ACCESS_NONE },
272 { THSVS_ACCESS_NONE, THSVS_ACCESS_NONE },
273 { THSVS_ACCESS_NONE, THSVS_ACCESS_NONE },
274 { THSVS_ACCESS_NONE, THSVS_ACCESS_NONE },
275 { THSVS_ACCESS_NONE, THSVS_ACCESS_NONE }
277 ThsvsImageLayout
svsLayout { THSVS_IMAGE_LAYOUT_OPTIMAL };
278 VkImageLayout
vkLayout { VK_IMAGE_LAYOUT_UNDEFINED };
280 VkImageView
view { VK_NULL_HANDLE };
319 array<ThsvsAccessType, 2>
accessTypes { THSVS_ACCESS_NONE, THSVS_ACCESS_NONE };
320 ThsvsImageLayout
svsLayout { THSVS_IMAGE_LAYOUT_OPTIMAL };
322 VkImageView
view { VK_NULL_HANDLE };
363 VK_NULL_HANDLE, VK_NULL_HANDLE, VK_NULL_HANDLE, VK_NULL_HANDLE,
364 VK_NULL_HANDLE, VK_NULL_HANDLE, VK_NULL_HANDLE, VK_NULL_HANDLE,
365 VK_NULL_HANDLE, VK_NULL_HANDLE
372 array<uint32_t, 10>
boundBufferSizes { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
377 VkImageView
view { VK_NULL_HANDLE };
378 VkImageLayout
layout { VK_IMAGE_LAYOUT_UNDEFINED };
434 array<buffer_object_type*, BUFFERS_MAX + 1>
buffers;
476 VkCullModeFlagBits
cullMode { VK_CULL_MODE_FRONT_BIT};
508 VkBool32
checkLayers(uint32_t checkCount,
const char **checkNames,
const vector<VkLayerProperties>& instanceLayers);
509 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);
513 const array<ThsvsAccessType,2>& prevAccessTypes,
514 const array<ThsvsAccessType,2>& nextAccessTypes,
515 ThsvsImageLayout prevLayout,
516 ThsvsImageLayout nextLayout,
518 uint32_t baseMipLevel = 0,
519 uint32_t levelCount = 1
522 void applyImageLayoutChanges(
int contextIdx,
const array<image_layout_change, 8> imageLayoutChanges, array<texture_type*, 8> textureObjects,
bool submit =
true);
523 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);
524 void setImageLayout3(
int contextIdx, VkImage image, VkImageAspectFlags aspectMask,
const array<ThsvsAccessType,2>& accessTypes,
const array<ThsvsAccessType,2>& nextAccessTypes, ThsvsImageLayout layout, ThsvsImageLayout nextLayout);
525 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);
528 void createBuffer(VkDeviceSize size, VkBufferUsageFlags usage, VkMemoryPropertyFlags properties, VkBuffer& buffer, VmaAllocation& allocation, VmaAllocationInfo& allocationInfo);
530 void vmaMemCpy(VmaAllocation allocationDst,
const uint8_t* src, uint32_t size, uint32_t offset = 0);
532 void uploadBufferObjectInternal(
int contextIdx, int32_t bufferObjectId, int32_t size,
const uint8_t* data, VkBufferUsageFlagBits usage);
567 void createDepthBufferTexture(int32_t textureId, int32_t width, int32_t height, int32_t cubeMapTextureId, int32_t cubeMapTextureIndex);
568 void createBufferTexture(int32_t textureId, int32_t width, int32_t height, int32_t cubeMapTextureId, int32_t cubeMapTextureIndex, VkFormat format);
572 VkCommandBuffer
endDrawCommandBuffer(
int contextIdx,
int bufferId = -1,
bool cycleBuffers =
true);
608 int32_t
loadShader(int32_t type,
const string& pathName,
const string& fileName,
const string& definitions =
string(),
const string& functions =
string())
override;
609 void useProgram(
int contextIdx, int32_t programId)
override;
623 void setViewPort(int32_t width, int32_t height)
override;
625 void setClearColor(
float red,
float green,
float blue,
float alpha)
override;
628 void setFrontFace(
int contextIdx, int32_t frontFace)
override;
638 void setColorMask(
bool red,
bool green,
bool blue,
bool alpha)
override;
639 void clear(int32_t mask)
override;
641 int32_t
createDepthBufferTexture(int32_t width, int32_t height, int32_t cubeMapTextureId, int32_t cubeMapTextureIndex)
override;
642 int32_t
createColorBufferTexture(int32_t width, int32_t height, int32_t cubeMapTextureId, int32_t cubeMapTextureIndex)
override;
652 void bindTexture(
int contextIdx, int32_t textureId)
override;
655 int32_t
createFramebufferObject(int32_t depthBufferTextureId, int32_t colorBufferTextureId, int32_t cubeMapTextureId = 0, int32_t cubeMapTextureIndex = 0)
override;
657 int32_t depthBufferTextureId,
658 int32_t geometryBufferTextureId1,
659 int32_t geometryBufferTextureId2,
660 int32_t geometryBufferTextureId3,
661 int32_t colorBufferTextureId1,
662 int32_t colorBufferTextureId2,
663 int32_t colorBufferTextureId3,
664 int32_t colorBufferTextureId4,
665 int32_t colorBufferTextureId5
669 vector<int32_t>
createBufferObjects(int32_t bufferCount,
bool useGPUMemory,
bool shared)
override;
706 void dispatchCompute(
int contextIdx, int32_t numNodesX, int32_t numNodesY, int32_t numNodesZ)
override;
721 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
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)
bool textureCompressionAvailable
void memoryBarrier() override
Memory barrier.
void createBufferTexture(int32_t textureId, int32_t width, int32_t height, int32_t cubeMapTextureId, int32_t cubeMapTextureIndex, VkFormat format)
static constexpr int GUI_VERTEX_BUFFER_COUNT
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)
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
void setupGUIRenderingPipeline(int contextIdx, program_type *program)
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 createGUIRenderingPipeline(int contextIdx, program_type *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.
bool deferredShadingAvailable
texture_type * getBindTextureInternal(int32_t textureId)
void prepareMipMapTextureImage(int contextIdx, struct texture_type *textureObject, VkImageTiling tiling, VkImageUsageFlags usage, VkFlags requiredFlags, Texture *texture, const Texture::MipMapTexture &mipMapTexture, const array< ThsvsAccessType, 2 > &nextAccesses, ThsvsImageLayout imageLayout)
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.
void bindVertices2BufferObject(int contextIdx, int32_t bufferObjectId) override
Bind vertices 2 buffer object.
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)
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.
bool isTextureCompressionAvailable() override
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
void bindSolidColorsBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind solid colors buffer object.
PFN_vkGetPhysicalDeviceSurfaceSupportKHR fpGetPhysicalDeviceSurfaceSupportKHR
vector< framebuffer_object_type * > framebuffers
bool isUsingProgramAttributeLocation() override
Matrix3x3 class representing matrix3x3 mathematical structure and operations for 2d space.
Matrix4x4 class representing matrix4x4 mathematical structure and operations for 3d space.
Implementation for read/write lock.
Spin Lock implementation.
std::size_t operator()(const tuple< uint16_t, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t > &k) const
Bean holding light properties.
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
delete_buffer_type(VkBuffer buffer, VmaAllocation allocation)
delete_image_type(VkImage image, VmaAllocation allocation, VkImageView imageView, VkSampler sampler)
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
unordered_map< tuple< uint16_t, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t >, int, TextureDescriptorSet_Hash > texturesDescriptorSetsCache
array< VkDescriptorSet, DESC_MAX_CACHED > descriptorSets2
array< command_buffer, DRAW_COMMANDBUFFER_MAX > commandBuffers
uint32_t descriptorSets2Idx
vector< uint32_t > freeTextureDescriptorSetsIds
unordered_map< int32_t, unordered_set< tuple< uint16_t, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t >, TextureDescriptorSet_Hash > > texturesDescriptorSetsCacheTextureIds
vector< int32_t > shaderIds
vector< context > contexts
vector< shader_type * > shaders
VkPipelineLayout pipelineLayout
VkDescriptorSetLayout texturesDescriptorSetLayout
unordered_map< int32_t, string > uniformLocations
VkDescriptorSetLayout uboDescriptorSetLayout
attribute_layout(const string &name, const string &type, const uint8_t location)
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
#define FORBID_CLASS_COPY(CLASS)