diff options
| author | Yong He <yonghe@outlook.com> | 2021-03-10 10:58:15 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-03-10 10:58:15 -0800 |
| commit | 6ef4054f8a8aea4ec61481057fa7e16aaecde6d7 (patch) | |
| tree | 66edcae112faff7276c2595865463698bde277fd /tools/gfx/open-gl/render-gl.cpp | |
| parent | 2765861cdc104e6104a31cf9e20800b8d1dfae26 (diff) | |
Swapchain resize and rename to `IDevice` (#1741)
* Swapchain resize
* Fix.
Diffstat (limited to 'tools/gfx/open-gl/render-gl.cpp')
| -rw-r--r-- | tools/gfx/open-gl/render-gl.cpp | 291 |
1 files changed, 173 insertions, 118 deletions
diff --git a/tools/gfx/open-gl/render-gl.cpp b/tools/gfx/open-gl/render-gl.cpp index 01f285f65..cd17aee78 100644 --- a/tools/gfx/open-gl/render-gl.cpp +++ b/tools/gfx/open-gl/render-gl.cpp @@ -88,7 +88,7 @@ using namespace Slang; namespace gfx { -class GLRenderer : public ImmediateRendererBase +class GLDevice : public ImmediateRendererBase { public: // Renderer implementation @@ -179,13 +179,14 @@ public: virtual SLANG_NO_THROW void SLANG_MCALL dispatchCompute(int x, int y, int z) override; virtual SLANG_NO_THROW void SLANG_MCALL submitGpuWork() override {} virtual SLANG_NO_THROW void SLANG_MCALL waitForGpu() override {} - virtual SLANG_NO_THROW RendererType SLANG_MCALL getRendererType() const override + virtual SLANG_NO_THROW const DeviceInfo& SLANG_MCALL getDeviceInfo() const override { - return RendererType::OpenGl; + return m_info; } + HGLRC createGLContext(HDC hdc); - GLRenderer(); - ~GLRenderer(); + GLDevice(); + ~GLDevice(); protected: enum @@ -227,7 +228,7 @@ public: public: typedef BufferResource Parent; - BufferResourceImpl(Usage initialUsage, const Desc& desc, WeakSink<GLRenderer>* renderer, GLuint id, GLenum target): + BufferResourceImpl(Usage initialUsage, const Desc& desc, WeakSink<GLDevice>* renderer, GLuint id, GLenum target): Parent(desc), m_renderer(renderer), m_handle(id), @@ -243,7 +244,7 @@ public: } Usage m_initialUsage; - RefPtr<WeakSink<GLRenderer> > m_renderer; + RefPtr<WeakSink<GLDevice> > m_renderer; GLuint m_handle; GLenum m_target; }; @@ -253,7 +254,7 @@ public: public: typedef TextureResource Parent; - TextureResourceImpl(Usage initialUsage, const Desc& desc, WeakSink<GLRenderer>* renderer): + TextureResourceImpl(Usage initialUsage, const Desc& desc, WeakSink<GLDevice>* renderer): Parent(desc), m_initialUsage(initialUsage), m_renderer(renderer) @@ -271,7 +272,7 @@ public: } Usage m_initialUsage; - RefPtr<WeakSink<GLRenderer> > m_renderer; + RefPtr<WeakSink<GLDevice> > m_renderer; GLenum m_target; GLuint m_handle; }; @@ -351,14 +352,14 @@ public: public: GLuint m_framebuffer; ShortList<GLenum> m_drawBuffers; - WeakSink<GLRenderer>* m_renderer; + WeakSink<GLDevice>* m_renderer; ShortList<RefPtr<TextureViewImpl>> renderTargetViews; RefPtr<TextureViewImpl> depthStencilView; ShortList<ColorClearValue> m_colorClearValues; bool m_sameClearValues = true; DepthStencilClearValue m_depthStencilClearValue; - FramebufferImpl(WeakSink<GLRenderer>* renderer) :m_renderer(renderer) {} + FramebufferImpl(WeakSink<GLDevice>* renderer) :m_renderer(renderer) {} ~FramebufferImpl() { if (auto renderer = m_renderer->get()) @@ -429,73 +430,92 @@ public: public: ~SwapchainImpl() { - for (auto image : m_images) - image->m_handle = 0; - if (auto rendererRef = m_renderer->get()) + destroyBackBufferAndFBO(); + wglDeleteContext(m_glrc); + ::ReleaseDC(m_hwnd, m_hdc); + } + void destroyBackBufferAndFBO() + { + if (m_images.getCount()) { - rendererRef->glDeleteFramebuffers(1, &m_framebuffer); + wglMakeCurrent(m_rendererHDC, m_rendererRC); + if (auto rendererRef = m_renderer->get()) + { + rendererRef->glDeleteFramebuffers(1, &m_framebuffer); + } + wglMakeCurrent(m_hdc, m_glrc); glDeleteTextures(1, &m_backBuffer); + for (auto image : m_images) + image->m_handle = 0; + m_images.clear(); } - wglMakeCurrent(m_hdc, 0); - wglDeleteContext(m_glrc); - ::ReleaseDC(m_hwnd, m_hdc); } - Result init(GLRenderer* renderer, const ISwapchain::Desc& desc, WindowHandle window) + void createBackBufferAndFBO() + { + if (m_desc.width > 0 && m_desc.height > 0) + { + wglMakeCurrent(m_rendererHDC, m_rendererRC); + + glGenTextures(1, &m_backBuffer); + glBindTexture(GL_TEXTURE_2D, m_backBuffer); + glTexImage2D( + GL_TEXTURE_2D, + 0, + GL_RGBA8, + m_desc.width, + m_desc.height, + 0, + GL_RGBA, + GL_UNSIGNED_BYTE, + nullptr); + + wglMakeCurrent(m_hdc, m_glrc); + m_renderer->get()->glGenFramebuffers(1, &m_framebuffer); + m_renderer->get()->glBindFramebuffer(GL_READ_FRAMEBUFFER, m_framebuffer); + m_renderer->get()->glFramebufferTexture2D( + GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_backBuffer, 0); + + m_images.clear(); + for (uint32_t i = 0; i < m_desc.imageCount; i++) + { + ITextureResource::Desc texDesc = {}; + texDesc.init2D( + IResource::Type::Texture2D, + gfx::Format::RGBA_Unorm_UInt8, + m_desc.width, + m_desc.height, + 1); + RefPtr<TextureResourceImpl> tex = new TextureResourceImpl( + IResource::Usage::RenderTarget, texDesc, m_renderer); + tex->m_handle = m_backBuffer; + m_images.add(tex); + } + wglMakeCurrent(m_rendererHDC, m_rendererRC); + } + } + Result init(GLDevice* renderer, const ISwapchain::Desc& desc, WindowHandle window) { m_renderer = renderer->m_weakRenderer.Ptr(); + m_rendererHDC = renderer->m_hdc; + m_rendererRC = renderer->m_glContext; m_hwnd = (HWND)window.handleValues[0]; m_hdc = ::GetDC(m_hwnd); m_glrc = renderer->createGLContext(m_hdc); - wglMakeCurrent(renderer->m_hdc, renderer->m_glContext); - m_desc = desc; - glGenTextures(1, &m_backBuffer); - glBindTexture(GL_TEXTURE_2D, m_backBuffer); - glTexImage2D( - GL_TEXTURE_2D, - 0, - GL_RGBA8, - desc.width, - desc.height, - 0, - GL_RGBA, - GL_UNSIGNED_BYTE, - nullptr); - - wglMakeCurrent(m_hdc, m_glrc); - renderer->glGenFramebuffers(1, &m_framebuffer); - renderer->glBindFramebuffer(GL_READ_FRAMEBUFFER, m_framebuffer); - renderer->glFramebufferTexture2D( - GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_backBuffer, 0); - - for (uint32_t i = 0; i < desc.imageCount; i++) - { - ITextureResource::Desc texDesc = {}; - texDesc.init2D( - IResource::Type::Texture2D, - gfx::Format::RGBA_Unorm_UInt8, - desc.width, - desc.height, - 1); - RefPtr<TextureResourceImpl> tex = - new TextureResourceImpl(IResource::Usage::RenderTarget, texDesc, m_renderer); - tex->m_handle = m_backBuffer; - m_images.add(tex); - } - wglMakeCurrent(renderer->m_hdc, renderer->m_glContext); + createBackBufferAndFBO(); return SLANG_OK; } virtual SLANG_NO_THROW const Desc& SLANG_MCALL getDesc() override { return m_desc; } - virtual SLANG_NO_THROW Result + virtual SLANG_NO_THROW Result SLANG_MCALL getImage(uint32_t index, ITextureResource** outResource) override { m_images[index]->addRef(); *outResource = m_images[index].Ptr(); return SLANG_OK; } - virtual SLANG_NO_THROW Result present() override + virtual SLANG_NO_THROW Result SLANG_MCALL present() override { glFlush(); wglMakeCurrent(m_hdc, m_glrc); @@ -518,18 +538,35 @@ public: return SLANG_OK; } - virtual SLANG_NO_THROW uint32_t acquireNextImage() override + virtual SLANG_NO_THROW int SLANG_MCALL acquireNextImage() override + { + if (m_desc.width > 0 && m_desc.height > 0) + return 0; + return -1; + } + + virtual SLANG_NO_THROW Result SLANG_MCALL resize(uint32_t width, uint32_t height) override { - return 0; + if (width > 0 && height > 0 && (width != m_desc.width || height != m_desc.height)) + { + m_desc.width = width; + m_desc.height = height; + destroyBackBufferAndFBO(); + createBackBufferAndFBO(); + } + return SLANG_OK; } public: - WeakSink<GLRenderer>* m_renderer = nullptr; + WeakSink<GLDevice>* m_renderer = nullptr; GLuint m_framebuffer; GLuint m_backBuffer; HGLRC m_glrc; HWND m_hwnd; HDC m_hdc; + + HDC m_rendererHDC; + HGLRC m_rendererRC; ISwapchain::Desc m_desc; ShortList<RefPtr<TextureResourceImpl>> m_images; }; @@ -623,7 +660,7 @@ public: class ShaderProgramImpl : public GraphicsCommonShaderProgram { public: - ShaderProgramImpl(WeakSink<GLRenderer>* renderer, GLuint id): + ShaderProgramImpl(WeakSink<GLDevice>* renderer, GLuint id): m_renderer(renderer), m_id(id) { @@ -637,7 +674,7 @@ public: } GLuint m_id; - RefPtr<WeakSink<GLRenderer> > m_renderer; + RefPtr<WeakSink<GLDevice> > m_renderer; }; class PipelineStateImpl : public PipelineStateBase @@ -691,6 +728,11 @@ public: static void compileTimeAsserts(); + // GLDevice members. + + DeviceInfo m_info; + String m_adapterName; + HDC m_hdc; HGLRC m_glContext = 0; uint32_t m_stencilRef = 0; @@ -698,7 +740,7 @@ public: GLuint m_vao; RefPtr<PipelineStateImpl> m_currentPipelineState; RefPtr<FramebufferImpl> m_currentFramebuffer; - RefPtr<WeakSink<GLRenderer> > m_weakRenderer; + RefPtr<WeakSink<GLDevice> > m_weakRenderer; RefPtr<DescriptorSetImpl> m_boundDescriptorSets[kMaxDescriptorSetCount]; @@ -719,7 +761,7 @@ public: static const GlPixelFormatInfo s_pixelFormatInfos[]; /// Maps GlPixelFormat to a format info }; -/* static */GLRenderer::GlPixelFormat GLRenderer::_getGlPixelFormat(Format format) +/* static */GLDevice::GlPixelFormat GLDevice::_getGlPixelFormat(Format format) { switch (format) { @@ -731,7 +773,7 @@ public: } } -/* static */ const GLRenderer::GlPixelFormatInfo GLRenderer::s_pixelFormatInfos[] = +/* static */ const GLDevice::GlPixelFormatInfo GLDevice::s_pixelFormatInfos[] = { // internalType, format, formatType { 0, 0, 0}, // GlPixelFormat::Unknown @@ -741,20 +783,20 @@ public: }; -/* static */void GLRenderer::compileTimeAsserts() +/* static */void GLDevice::compileTimeAsserts() { SLANG_COMPILE_TIME_ASSERT(SLANG_COUNT_OF(s_pixelFormatInfos) == int(GlPixelFormat::CountOf)); } -SlangResult SLANG_MCALL createGLRenderer(const IRenderer::Desc* desc, IRenderer** outRenderer) +SlangResult SLANG_MCALL createGLDevice(const IDevice::Desc* desc, IDevice** outRenderer) { - RefPtr<GLRenderer> result = new GLRenderer(); + RefPtr<GLDevice> result = new GLDevice(); SLANG_RETURN_ON_FAIL(result->initialize(*desc)); *outRenderer = result.detach(); return SLANG_OK; } -void GLRenderer::debugCallback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message) +void GLDevice::debugCallback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message) { ::OutputDebugStringA("GL: "); ::OutputDebugStringA(message); @@ -769,12 +811,12 @@ void GLRenderer::debugCallback(GLenum source, GLenum type, GLuint id, GLenum sev } } -/* static */void APIENTRY GLRenderer::staticDebugCallback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, const void* userParam) +/* static */void APIENTRY GLDevice::staticDebugCallback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, const void* userParam) { - ((GLRenderer*)userParam)->debugCallback(source, type, id, severity, length, message); + ((GLDevice*)userParam)->debugCallback(source, type, id, severity, length, message); } -/* static */GLRenderer::VertexAttributeFormat GLRenderer::getVertexAttributeFormat(Format format) +/* static */GLDevice::VertexAttributeFormat GLDevice::getVertexAttributeFormat(Format format) { switch (format) { @@ -791,7 +833,7 @@ void GLRenderer::debugCallback(GLenum source, GLenum type, GLuint id, GLenum sev } } -void GLRenderer::bindBufferImpl(int target, UInt startSlot, UInt slotCount, BufferResource*const* buffers, const UInt* offsets) +void GLDevice::bindBufferImpl(int target, UInt startSlot, UInt slotCount, BufferResource*const* buffers, const UInt* offsets) { for (UInt ii = 0; ii < slotCount; ++ii) { @@ -806,7 +848,7 @@ void GLRenderer::bindBufferImpl(int target, UInt startSlot, UInt slotCount, Buff } } -void GLRenderer::flushStateForDraw() +void GLDevice::flushStateForDraw() { if (m_currentFramebuffer) { @@ -907,7 +949,7 @@ void GLRenderer::flushStateForDraw() } } -GLuint GLRenderer::loadShader(GLenum stage, const char* source) +GLuint GLDevice::loadShader(GLenum stage, const char* source) { // GLSL is monumentally stupid. It officially requires the `#version` directive // to be the first thing in the file, which wouldn't be so bad but the API @@ -1076,9 +1118,9 @@ void destroyWindow(WindowHandle window) #endif } -GLRenderer::GLRenderer() { m_weakRenderer = new WeakSink<GLRenderer>(this); } +GLDevice::GLDevice() { m_weakRenderer = new WeakSink<GLDevice>(this); } -GLRenderer::~GLRenderer() +GLDevice::~GLDevice() { // We can destroy things whilst in this state m_currentPipelineState.setNull(); @@ -1093,7 +1135,7 @@ GLRenderer::~GLRenderer() } destroyWindow(m_windowHandle); - // By resetting the weak pointer, other objects accessing through WeakSink<GLRenderer> will no + // By resetting the weak pointer, other objects accessing through WeakSink<GLDevice> will no // longer be able to access this object which is entering a 'being destroyed' to 'destroyed' // state if (m_weakRenderer) @@ -1103,7 +1145,7 @@ GLRenderer::~GLRenderer() } } -HGLRC GLRenderer::createGLContext(HDC hdc) +HGLRC GLDevice::createGLContext(HDC hdc) { PIXELFORMATDESCRIPTOR pixelFormatDesc = {sizeof(PIXELFORMATDESCRIPTOR)}; pixelFormatDesc.nVersion = 1; @@ -1128,12 +1170,22 @@ HGLRC GLRenderer::createGLContext(HDC hdc) return newGLContext; } -SLANG_NO_THROW Result SLANG_MCALL GLRenderer::initialize(const Desc& desc) +SLANG_NO_THROW Result SLANG_MCALL GLDevice::initialize(const Desc& desc) { SLANG_RETURN_ON_FAIL(slangContext.initialize(desc.slang, SLANG_GLSL, "glsl_440")); SLANG_RETURN_ON_FAIL(GraphicsAPIRenderer::initialize(desc)); + // Initialize DeviceInfo + { + m_info.deviceType = DeviceType::OpenGl; + m_info.bindingStyle = BindingStyle::OpenGl; + m_info.projectionStyle = ProjectionStyle::OpenGl; + m_info.apiName = "OpenGL"; + static const float kIdentity[] = {1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1}; + ::memcpy(m_info.identityProjectionMatrix, kIdentity, sizeof(kIdentity)); + } + m_windowHandle = createWindow(); m_desc = desc; @@ -1154,6 +1206,7 @@ SLANG_NO_THROW Result SLANG_MCALL GLRenderer::initialize(const Desc& desc) wglMakeCurrent(m_hdc, m_glContext); auto renderer = glGetString(GL_RENDERER); + m_info.adapterName = (char*)renderer; if (renderer && desc.adapter) { @@ -1175,6 +1228,7 @@ SLANG_NO_THROW Result SLANG_MCALL GLRenderer::initialize(const Desc& desc) } } + auto extensions = glGetString(GL_EXTENSIONS); // Load each of our extension functions by name @@ -1214,11 +1268,12 @@ SLANG_NO_THROW Result SLANG_MCALL GLRenderer::initialize(const Desc& desc) glEnable(GL_DEBUG_OUTPUT); glDebugMessageCallback(staticDebugCallback, this); } + return SLANG_OK; } SLANG_NO_THROW void SLANG_MCALL - GLRenderer::clearFrame(uint32_t mask, bool clearDepth, bool clearStencil) + GLDevice::clearFrame(uint32_t mask, bool clearDepth, bool clearStencil) { uint32_t clearMask = 0; if (clearDepth) @@ -1284,7 +1339,7 @@ SLANG_NO_THROW void SLANG_MCALL } } -SLANG_NO_THROW Result SLANG_MCALL GLRenderer::createSwapchain( +SLANG_NO_THROW Result SLANG_MCALL GLDevice::createSwapchain( const ISwapchain::Desc& desc, WindowHandle window, ISwapchain** outSwapchain) { RefPtr<SwapchainImpl> swapchain = new SwapchainImpl(); @@ -1294,7 +1349,7 @@ SLANG_NO_THROW Result SLANG_MCALL GLRenderer::createSwapchain( return SLANG_OK; } -SLANG_NO_THROW Result SLANG_MCALL GLRenderer::createFramebufferLayout( +SLANG_NO_THROW Result SLANG_MCALL GLDevice::createFramebufferLayout( const IFramebufferLayout::Desc& desc, IFramebufferLayout** outLayout) { RefPtr<FramebufferLayoutImpl> layout = new FramebufferLayoutImpl(); @@ -1318,7 +1373,7 @@ SLANG_NO_THROW Result SLANG_MCALL GLRenderer::createFramebufferLayout( } SLANG_NO_THROW Result SLANG_MCALL - GLRenderer::createFramebuffer(const IFramebuffer::Desc& desc, IFramebuffer** outFramebuffer) + GLDevice::createFramebuffer(const IFramebuffer::Desc& desc, IFramebuffer** outFramebuffer) { RefPtr<FramebufferImpl> framebuffer = new FramebufferImpl(m_weakRenderer); framebuffer->renderTargetViews.setCount(desc.renderTargetCount); @@ -1333,18 +1388,18 @@ SLANG_NO_THROW Result SLANG_MCALL return SLANG_OK; } -SLANG_NO_THROW void SLANG_MCALL GLRenderer::setFramebuffer(IFramebuffer* frameBuffer) +SLANG_NO_THROW void SLANG_MCALL GLDevice::setFramebuffer(IFramebuffer* frameBuffer) { m_currentFramebuffer = static_cast<FramebufferImpl*>(frameBuffer); } -void GLRenderer::setStencilReference(uint32_t referenceValue) +void GLDevice::setStencilReference(uint32_t referenceValue) { m_stencilRef = referenceValue; // TODO: actually set the stencil state. } -void GLRenderer::copyBuffer( +void GLDevice::copyBuffer( IBufferResource* dst, size_t dstOffset, IBufferResource* src, @@ -1358,7 +1413,7 @@ void GLRenderer::copyBuffer( glCopyBufferSubData(GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER, srcOffset, dstOffset, size); } -SLANG_NO_THROW Result SLANG_MCALL GLRenderer::readTextureResource( +SLANG_NO_THROW Result SLANG_MCALL GLDevice::readTextureResource( ITextureResource* texture, ResourceState state, ISlangBlob** outBlob, size_t* outRowPitch, size_t* outPixelSize) { SLANG_UNUSED(state); @@ -1392,7 +1447,7 @@ SLANG_NO_THROW Result SLANG_MCALL GLRenderer::readTextureResource( return SLANG_OK; } -SLANG_NO_THROW Result SLANG_MCALL GLRenderer::createTextureResource( +SLANG_NO_THROW Result SLANG_MCALL GLDevice::createTextureResource( IResource::Usage initialUsage, const ITextureResource::Desc& descIn, const ITextureResource::Data* initData, @@ -1610,7 +1665,7 @@ static GLenum _calcTarget(IResource::Usage usage) } } -SLANG_NO_THROW Result SLANG_MCALL GLRenderer::createBufferResource( +SLANG_NO_THROW Result SLANG_MCALL GLDevice::createBufferResource( IResource::Usage initialUsage, const IBufferResource::Desc& descIn, const void* initData, @@ -1635,7 +1690,7 @@ SLANG_NO_THROW Result SLANG_MCALL GLRenderer::createBufferResource( } SLANG_NO_THROW Result SLANG_MCALL - GLRenderer::createSamplerState(ISamplerState::Desc const& desc, ISamplerState** outSampler) + GLDevice::createSamplerState(ISamplerState::Desc const& desc, ISamplerState** outSampler) { GLuint samplerID; glCreateSamplers(1, &samplerID); @@ -1646,7 +1701,7 @@ SLANG_NO_THROW Result SLANG_MCALL return SLANG_OK; } -SLANG_NO_THROW Result SLANG_MCALL GLRenderer::createTextureView( +SLANG_NO_THROW Result SLANG_MCALL GLDevice::createTextureView( ITextureResource* texture, IResourceView::Desc const& desc, IResourceView** outView) { auto resourceImpl = static_cast<TextureResourceImpl*>(texture); @@ -1660,7 +1715,7 @@ SLANG_NO_THROW Result SLANG_MCALL GLRenderer::createTextureView( return SLANG_OK; } -SLANG_NO_THROW Result SLANG_MCALL GLRenderer::createBufferView( +SLANG_NO_THROW Result SLANG_MCALL GLDevice::createBufferView( IBufferResource* buffer, IResourceView::Desc const& desc, IResourceView** outView) { auto resourceImpl = (BufferResourceImpl*) buffer; @@ -1674,7 +1729,7 @@ SLANG_NO_THROW Result SLANG_MCALL GLRenderer::createBufferView( return SLANG_OK; } -SLANG_NO_THROW Result SLANG_MCALL GLRenderer::createInputLayout( +SLANG_NO_THROW Result SLANG_MCALL GLDevice::createInputLayout( const InputElementDesc* inputElements, UInt inputElementCount, IInputLayout** outLayout) { RefPtr<InputLayoutImpl> inputLayout = new InputLayoutImpl; @@ -1694,7 +1749,7 @@ SLANG_NO_THROW Result SLANG_MCALL GLRenderer::createInputLayout( return SLANG_OK; } -void* GLRenderer::map(IBufferResource* bufferIn, MapFlavor flavor) +void* GLDevice::map(IBufferResource* bufferIn, MapFlavor flavor) { BufferResourceImpl* buffer = static_cast<BufferResourceImpl*>(bufferIn); @@ -1717,13 +1772,13 @@ void* GLRenderer::map(IBufferResource* bufferIn, MapFlavor flavor) return glMapBuffer(buffer->m_target, access); } -void GLRenderer::unmap(IBufferResource* bufferIn) +void GLDevice::unmap(IBufferResource* bufferIn) { BufferResourceImpl* buffer = static_cast<BufferResourceImpl*>(bufferIn); glUnmapBuffer(buffer->m_target); } -SLANG_NO_THROW void SLANG_MCALL GLRenderer::setPrimitiveTopology(PrimitiveTopology topology) +SLANG_NO_THROW void SLANG_MCALL GLDevice::setPrimitiveTopology(PrimitiveTopology topology) { GLenum glTopology = 0; switch (topology) @@ -1737,7 +1792,7 @@ SLANG_NO_THROW void SLANG_MCALL GLRenderer::setPrimitiveTopology(PrimitiveTopolo m_boundPrimitiveTopology = glTopology; } -SLANG_NO_THROW void SLANG_MCALL GLRenderer::setVertexBuffers( +SLANG_NO_THROW void SLANG_MCALL GLDevice::setVertexBuffers( UInt startSlot, UInt slotCount, IBufferResource* const* buffers, @@ -1758,11 +1813,11 @@ SLANG_NO_THROW void SLANG_MCALL GLRenderer::setVertexBuffers( } SLANG_NO_THROW void SLANG_MCALL - GLRenderer::setIndexBuffer(IBufferResource* buffer, Format indexFormat, UInt offset) + GLDevice::setIndexBuffer(IBufferResource* buffer, Format indexFormat, UInt offset) { } -SLANG_NO_THROW void SLANG_MCALL GLRenderer::setViewports(UInt count, Viewport const* viewports) +SLANG_NO_THROW void SLANG_MCALL GLDevice::setViewports(UInt count, Viewport const* viewports) { assert(count == 1); auto viewport = viewports[0]; @@ -1774,7 +1829,7 @@ SLANG_NO_THROW void SLANG_MCALL GLRenderer::setViewports(UInt count, Viewport co glDepthRange(viewport.minZ, viewport.maxZ); } -SLANG_NO_THROW void SLANG_MCALL GLRenderer::setScissorRects(UInt count, ScissorRect const* rects) +SLANG_NO_THROW void SLANG_MCALL GLDevice::setScissorRects(UInt count, ScissorRect const* rects) { assert(count <= 1); if( count ) @@ -1802,7 +1857,7 @@ SLANG_NO_THROW void SLANG_MCALL GLRenderer::setScissorRects(UInt count, ScissorR } } -SLANG_NO_THROW void SLANG_MCALL GLRenderer::setPipelineState(IPipelineState* state) +SLANG_NO_THROW void SLANG_MCALL GLDevice::setPipelineState(IPipelineState* state) { auto pipelineStateImpl = static_cast<PipelineStateImpl*>(state); @@ -1813,7 +1868,7 @@ SLANG_NO_THROW void SLANG_MCALL GLRenderer::setPipelineState(IPipelineState* sta glUseProgram(programID); } -SLANG_NO_THROW void SLANG_MCALL GLRenderer::draw(UInt vertexCount, UInt startVertex = 0) +SLANG_NO_THROW void SLANG_MCALL GLDevice::draw(UInt vertexCount, UInt startVertex = 0) { flushStateForDraw(); @@ -1821,17 +1876,17 @@ SLANG_NO_THROW void SLANG_MCALL GLRenderer::draw(UInt vertexCount, UInt startVer } SLANG_NO_THROW void SLANG_MCALL - GLRenderer::drawIndexed(UInt indexCount, UInt startIndex, UInt baseVertex) + GLDevice::drawIndexed(UInt indexCount, UInt startIndex, UInt baseVertex) { assert(!"unimplemented"); } -SLANG_NO_THROW void SLANG_MCALL GLRenderer::dispatchCompute(int x, int y, int z) +SLANG_NO_THROW void SLANG_MCALL GLDevice::dispatchCompute(int x, int y, int z) { glDispatchCompute(x, y, z); } -SLANG_NO_THROW void SLANG_MCALL GLRenderer::DescriptorSetImpl::setConstantBuffer( +SLANG_NO_THROW void SLANG_MCALL GLDevice::DescriptorSetImpl::setConstantBuffer( UInt range, UInt index, IBufferResource* buffer) { auto resourceImpl = (BufferResourceImpl*) buffer; @@ -1844,7 +1899,7 @@ SLANG_NO_THROW void SLANG_MCALL GLRenderer::DescriptorSetImpl::setConstantBuffer } SLANG_NO_THROW void SLANG_MCALL - GLRenderer::DescriptorSetImpl::setResource(UInt range, UInt index, IResourceView* view) + GLDevice::DescriptorSetImpl::setResource(UInt range, UInt index, IResourceView* view) { auto viewImpl = static_cast<ResourceViewImpl*>(view); @@ -1864,12 +1919,12 @@ SLANG_NO_THROW void SLANG_MCALL } SLANG_NO_THROW void SLANG_MCALL - GLRenderer::DescriptorSetImpl::setSampler(UInt range, UInt index, ISamplerState* sampler) + GLDevice::DescriptorSetImpl::setSampler(UInt range, UInt index, ISamplerState* sampler) { assert(!"unsupported"); } -SLANG_NO_THROW void SLANG_MCALL GLRenderer::DescriptorSetImpl::setCombinedTextureSampler( +SLANG_NO_THROW void SLANG_MCALL GLDevice::DescriptorSetImpl::setCombinedTextureSampler( UInt range, UInt index, IResourceView* textureView, @@ -1886,16 +1941,16 @@ SLANG_NO_THROW void SLANG_MCALL GLRenderer::DescriptorSetImpl::setCombinedTextur m_samplers[arrayIndex] = samplerImpl; } -SLANG_NO_THROW void SLANG_MCALL GLRenderer::DescriptorSetImpl::setRootConstants( +SLANG_NO_THROW void SLANG_MCALL GLDevice::DescriptorSetImpl::setRootConstants( UInt range, UInt offset, UInt size, void const* data) { - SLANG_UNEXPECTED("unimplemented: setRootConstants for GlRenderer"); + SLANG_UNEXPECTED("unimplemented: setRootConstants for GLDevice"); } -SLANG_NO_THROW void SLANG_MCALL GLRenderer::setDescriptorSet( +SLANG_NO_THROW void SLANG_MCALL GLDevice::setDescriptorSet( PipelineType pipelineType, IPipelineLayout* layout, UInt index, IDescriptorSet* descriptorSet) { auto descriptorSetImpl = (DescriptorSetImpl*)descriptorSet; @@ -1905,7 +1960,7 @@ SLANG_NO_THROW void SLANG_MCALL GLRenderer::setDescriptorSet( m_boundDescriptorSets[index] = descriptorSetImpl; } -SLANG_NO_THROW Result SLANG_MCALL GLRenderer::createDescriptorSetLayout( +SLANG_NO_THROW Result SLANG_MCALL GLDevice::createDescriptorSetLayout( const IDescriptorSetLayout::Desc& desc, IDescriptorSetLayout** outLayout) { RefPtr<DescriptorSetLayoutImpl> layoutImpl = new DescriptorSetLayoutImpl(); @@ -1957,7 +2012,7 @@ SLANG_NO_THROW Result SLANG_MCALL GLRenderer::createDescriptorSetLayout( } SLANG_NO_THROW Result SLANG_MCALL - GLRenderer::createPipelineLayout(const IPipelineLayout::Desc& desc, IPipelineLayout** outLayout) + GLDevice::createPipelineLayout(const IPipelineLayout::Desc& desc, IPipelineLayout** outLayout) { RefPtr<PipelineLayoutImpl> layoutImpl = new PipelineLayoutImpl(); @@ -1986,7 +2041,7 @@ SLANG_NO_THROW Result SLANG_MCALL } SLANG_NO_THROW Result SLANG_MCALL - GLRenderer::createDescriptorSet(IDescriptorSetLayout* layout, IDescriptorSet::Flag::Enum flag, IDescriptorSet** outDescriptorSet) + GLDevice::createDescriptorSet(IDescriptorSetLayout* layout, IDescriptorSet::Flag::Enum flag, IDescriptorSet** outDescriptorSet) { SLANG_UNUSED(flag); @@ -2022,7 +2077,7 @@ SLANG_NO_THROW Result SLANG_MCALL return SLANG_OK; } -Result GLRenderer::createProgram(const IShaderProgram::Desc& desc, IShaderProgram** outProgram) +Result GLDevice::createProgram(const IShaderProgram::Desc& desc, IShaderProgram** outProgram) { if (desc.slangProgram && desc.slangProgram->getSpecializationParamCount() != 0) { @@ -2093,7 +2148,7 @@ Result GLRenderer::createProgram(const IShaderProgram::Desc& desc, IShaderProgra return SLANG_OK; } -Result GLRenderer::createGraphicsPipelineState(const GraphicsPipelineStateDesc& inDesc, IPipelineState** outState) +Result GLDevice::createGraphicsPipelineState(const GraphicsPipelineStateDesc& inDesc, IPipelineState** outState) { GraphicsPipelineStateDesc desc = inDesc; preparePipelineDesc(desc); @@ -2108,7 +2163,7 @@ Result GLRenderer::createGraphicsPipelineState(const GraphicsPipelineStateDesc& return SLANG_OK; } -Result GLRenderer::createComputePipelineState(const ComputePipelineStateDesc& inDesc, IPipelineState** outState) +Result GLDevice::createComputePipelineState(const ComputePipelineStateDesc& inDesc, IPipelineState** outState) { ComputePipelineStateDesc desc = inDesc; preparePipelineDesc(desc); |
