Implement draw2DRectangle for GEVulkanDriver
This commit is contained in:
parent
9e50c8a71f
commit
23cd67f45c
@ -144,7 +144,11 @@ namespace GE
|
||||
//!Draws an 2d rectangle with a gradient.
|
||||
virtual void draw2DRectangle(const core::rect<s32>& pos,
|
||||
SColor colorLeftUp, SColor colorRightUp, SColor colorLeftDown, SColor colorRightDown,
|
||||
const core::rect<s32>* clip) {}
|
||||
const core::rect<s32>* clip)
|
||||
{
|
||||
SColor color[4] = { colorLeftUp, colorLeftDown, colorRightDown, colorRightUp };
|
||||
draw2DImage(m_white_texture, pos, core::recti(0, 0, 2, 2), clip, color, true);
|
||||
}
|
||||
|
||||
//! Draws a 2d line.
|
||||
virtual void draw2DLine(const core::position2d<s32>& start,
|
||||
@ -311,6 +315,9 @@ namespace GE
|
||||
constexpr static unsigned getMaxFrameInFlight() { return 2; }
|
||||
video::SColor getClearColor() const { return m_clear_color; }
|
||||
const core::rect<s32>& getCurrentClip() const { return m_clip; }
|
||||
video::ITexture* getWhiteTexture() const { return m_white_texture; }
|
||||
video::ITexture* getTransparentTexture() const
|
||||
{ return m_transparent_texture; }
|
||||
private:
|
||||
struct SwapChainSupportDetails
|
||||
{
|
||||
@ -426,6 +433,9 @@ namespace GE
|
||||
video::SColor m_clear_color;
|
||||
core::rect<s32> m_clip;
|
||||
|
||||
video::ITexture* m_white_texture;
|
||||
video::ITexture* m_transparent_texture;
|
||||
|
||||
void createInstance(SDL_Window* window);
|
||||
void findPhysicalDevice();
|
||||
bool checkDeviceExtensions(VkPhysicalDevice device);
|
||||
@ -442,6 +452,7 @@ namespace GE
|
||||
void createSamplers();
|
||||
void createRenderPass();
|
||||
void createFramebuffers();
|
||||
void createUnicolorTextures();
|
||||
std::string getVulkanVersionString() const;
|
||||
std::string getDriverVersionString() const;
|
||||
};
|
||||
|
@ -459,6 +459,7 @@ GEVulkanDriver::GEVulkanDriver(const SIrrlichtCreationParameters& params,
|
||||
m_current_frame = 0;
|
||||
m_image_index = 0;
|
||||
m_clear_color = video::SColor(0);
|
||||
m_white_texture = NULL;
|
||||
|
||||
createInstance(window);
|
||||
|
||||
@ -507,6 +508,7 @@ GEVulkanDriver::GEVulkanDriver(const SIrrlichtCreationParameters& params,
|
||||
// For GEVulkanDynamicBuffer
|
||||
GE::setVideoDriver(this);
|
||||
GEVulkan2dRenderer::init(this);
|
||||
createUnicolorTextures();
|
||||
os::Printer::log("Vulkan version", getVulkanVersionString().c_str());
|
||||
os::Printer::log("Vulkan vendor", getVendorInfo().c_str());
|
||||
os::Printer::log("Vulkan renderer", m_properties.deviceName);
|
||||
@ -524,12 +526,40 @@ GEVulkanDriver::~GEVulkanDriver()
|
||||
// ----------------------------------------------------------------------------
|
||||
void GEVulkanDriver::destroyVulkan()
|
||||
{
|
||||
if (m_white_texture)
|
||||
{
|
||||
m_white_texture->drop();
|
||||
m_white_texture = NULL;
|
||||
}
|
||||
if (m_transparent_texture)
|
||||
{
|
||||
m_transparent_texture->drop();
|
||||
m_transparent_texture = NULL;
|
||||
}
|
||||
|
||||
GEVulkan2dRenderer::destroy();
|
||||
GEVulkanShaderManager::destroy();
|
||||
delete m_vk.get();
|
||||
m_vk.release();
|
||||
} // destroyVulkan
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
void GEVulkanDriver::createUnicolorTextures()
|
||||
{
|
||||
constexpr unsigned size = 2;
|
||||
std::array<uint8_t, size * size * 4> data;
|
||||
data.fill(255);
|
||||
video::IImage* img = createImageFromData(video::ECF_A8R8G8B8,
|
||||
core::dimension2d<u32>(size, size), data.data(),
|
||||
/*ownForeignMemory*/true, /*deleteMemory*/false);
|
||||
m_white_texture = new GEVulkanTexture(img, "unicolor_white");
|
||||
data.fill(0);
|
||||
img = createImageFromData(video::ECF_A8R8G8B8,
|
||||
core::dimension2d<u32>(size, size), data.data(),
|
||||
/*ownForeignMemory*/true, /*deleteMemory*/false);
|
||||
m_transparent_texture = new GEVulkanTexture(img, "unicolor_transparent");
|
||||
} // createUnicolorTextures
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
void GEVulkanDriver::createInstance(SDL_Window* window)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user