Package icyllis.arc3d.opengl
Class GLCommandBuffer
java.lang.Object
icyllis.arc3d.engine.CommandBuffer
icyllis.arc3d.opengl.GLCommandBuffer
The OpenGL command buffer. The commands executed on
GLCommandBuffer
are
mostly the same as that on GLDevice
, but GLCommandBuffer
assumes some values
and will not handle dirty context.-
Method Summary
Modifier and TypeMethodDescriptionprotected void
begin()
boolean
beginRenderPass
(RenderPassDesc renderPassDesc, FramebufferDesc framebufferDesc, Rect2ic renderPassBounds, float[] clearColors, float clearDepth, int clearStencil) Begin render pass.boolean
bindGraphicsPipeline
(@RawPtr GraphicsPipeline graphicsPipeline) Bind graphics pipeline.void
bindIndexBuffer
(int indexType, @RawPtr Buffer buffer, long offset) Render pass scope, caller must track the buffer.void
bindTextureSampler
(int binding, @RawPtr Image texture, @RawPtr Sampler sampler, short swizzle) Bind texture view and sampler to the same binding point (combined image sampler).void
bindUniformBuffer
(int binding, @RawPtr Buffer buffer, long offset, long size) Render pass scope, caller must track the buffer.void
bindVertexBuffer
(int binding, @RawPtr Buffer buffer, long offset) Render pass scope, caller must track the buffer.protected boolean
void
draw
(int vertexCount, int baseVertex) Records a non-indexed draw to current command buffer.void
drawIndexed
(int indexCount, int baseIndex, int baseVertex) Records an indexed draw to current command buffer.void
drawIndexedInstanced
(int indexCount, int baseIndex, int instanceCount, int baseInstance, int baseVertex) Records an indexed draw to current command buffer.void
drawInstanced
(int instanceCount, int baseInstance, int vertexCount, int baseVertex) Records a non-indexed draw to current command buffer.void
End the current render pass.void
flushColorWrite
(boolean enable) Flush color mask for draw buffer 0.void
flushDepthWrite
(boolean enable) void
flushScissorTest
(boolean enable) Flush scissor test.protected boolean
onCopyBuffer
(@RawPtr Buffer srcBuffer, @RawPtr Buffer dstBuffer, long srcOffset, long dstOffset, long size) protected boolean
onCopyBufferToImage
(@RawPtr Buffer srcBuffer, @RawPtr Image dstImage, int srcColorType, int dstColorType, BufferImageCopyData[] copyData) protected boolean
onCopyImage
(@RawPtr Image srcImage, int srcL, int srcT, int srcR, int srcB, @RawPtr Image dstImage, int dstX, int dstY, int mipLevel) void
void
setScissor
(int x, int y, int width, int height) void
setViewport
(int x, int y, int width, int height) protected boolean
submit
(QueueManager queueManager) protected void
Blocks the current thread and waits for GPU to finish outstanding works.Methods inherited from class icyllis.arc3d.engine.CommandBuffer
callFinishedCallbacks, copyBuffer, copyBufferToImage, copyImage, releaseResources, trackCommandBufferResource, trackResource, trackResource
-
Method Details
-
resetStates
public void resetStates() -
beginRenderPass
public boolean beginRenderPass(RenderPassDesc renderPassDesc, FramebufferDesc framebufferDesc, Rect2ic renderPassBounds, float[] clearColors, float clearDepth, int clearStencil) Description copied from class:CommandBuffer
Begin render pass. If successful,CommandBuffer.endRenderPass()
must be called.- Specified by:
beginRenderPass
in classCommandBuffer
- Parameters:
renderPassDesc
- descriptor to create a render passframebufferDesc
- descriptor to create a framebufferrenderPassBounds
- content bounds of this render passclearColors
- clear color for each color attachmentclearDepth
- clear depthclearStencil
- clear stencil (unsigned)- Returns:
- success or not
-
endRenderPass
public void endRenderPass()Description copied from class:CommandBuffer
End the current render pass.- Specified by:
endRenderPass
in classCommandBuffer
-
onCopyBuffer
protected boolean onCopyBuffer(@RawPtr @RawPtr Buffer srcBuffer, @RawPtr @RawPtr Buffer dstBuffer, long srcOffset, long dstOffset, long size) - Specified by:
onCopyBuffer
in classCommandBuffer
-
onCopyBufferToImage
protected boolean onCopyBufferToImage(@RawPtr @RawPtr Buffer srcBuffer, @RawPtr @RawPtr Image dstImage, int srcColorType, int dstColorType, BufferImageCopyData[] copyData) - Specified by:
onCopyBufferToImage
in classCommandBuffer
-
onCopyImage
protected boolean onCopyImage(@RawPtr @RawPtr Image srcImage, int srcL, int srcT, int srcR, int srcB, @RawPtr @RawPtr Image dstImage, int dstX, int dstY, int mipLevel) - Specified by:
onCopyImage
in classCommandBuffer
-
flushScissorTest
public void flushScissorTest(boolean enable) Flush scissor test.- Parameters:
enable
- whether to enable scissor test
-
flushColorWrite
public void flushColorWrite(boolean enable) Flush color mask for draw buffer 0.- Parameters:
enable
- whether to write color
-
flushDepthWrite
public void flushDepthWrite(boolean enable) -
bindGraphicsPipeline
Description copied from class:CommandBuffer
Bind graphics pipeline. Due to async compiling, it may fail. Render pass scope, caller must track the pipeline.- Specified by:
bindGraphicsPipeline
in classCommandBuffer
- Parameters:
graphicsPipeline
- the pipeline object- Returns:
- success or not
-
setViewport
public void setViewport(int x, int y, int width, int height) Description copied from class:CommandBuffer
Set viewport, must be called afterCommandBuffer.beginRenderPass(icyllis.arc3d.engine.RenderPassDesc, icyllis.arc3d.engine.FramebufferDesc, icyllis.arc3d.core.Rect2ic, float[], float, int)
.- Specified by:
setViewport
in classCommandBuffer
-
setScissor
public void setScissor(int x, int y, int width, int height) Description copied from class:CommandBuffer
Set scissor, must be called afterCommandBuffer.beginRenderPass(icyllis.arc3d.engine.RenderPassDesc, icyllis.arc3d.engine.FramebufferDesc, icyllis.arc3d.core.Rect2ic, float[], float, int)
.- Specified by:
setScissor
in classCommandBuffer
-
bindIndexBuffer
Description copied from class:CommandBuffer
Render pass scope, caller must track the buffer.- Specified by:
bindIndexBuffer
in classCommandBuffer
- Parameters:
indexType
- seeEngine.IndexType
-
bindVertexBuffer
Description copied from class:CommandBuffer
Render pass scope, caller must track the buffer.- Specified by:
bindVertexBuffer
in classCommandBuffer
-
bindUniformBuffer
Description copied from class:CommandBuffer
Render pass scope, caller must track the buffer.- Specified by:
bindUniformBuffer
in classCommandBuffer
-
bindTextureSampler
public void bindTextureSampler(int binding, @RawPtr @RawPtr Image texture, @RawPtr @RawPtr Sampler sampler, short swizzle) Description copied from class:CommandBuffer
Bind texture view and sampler to the same binding point (combined image sampler). Render pass scope, caller must track the image and sampler.- Specified by:
bindTextureSampler
in classCommandBuffer
- Parameters:
binding
- the binding indextexture
- the texture imagesampler
- the sampler stateswizzle
- the swizzle of the texture view for shader read, seeSwizzle
-
draw
public void draw(int vertexCount, int baseVertex) Description copied from class:CommandBuffer
Records a non-indexed draw to current command buffer. Render pass scope.- Specified by:
draw
in classCommandBuffer
- Parameters:
vertexCount
- the number of vertices to drawbaseVertex
- the index of the first vertex to draw
-
drawIndexed
public void drawIndexed(int indexCount, int baseIndex, int baseVertex) Description copied from class:CommandBuffer
Records an indexed draw to current command buffer. For OpenGL ES, if base vertex is unavailable, gl_VertexID always begins at 0. Render pass scope.- Specified by:
drawIndexed
in classCommandBuffer
- Parameters:
indexCount
- the number of vertices to drawbaseIndex
- the base index within the index bufferbaseVertex
- the value added to the vertex index before indexing into the vertex buffer
-
drawInstanced
public void drawInstanced(int instanceCount, int baseInstance, int vertexCount, int baseVertex) Description copied from class:CommandBuffer
Records a non-indexed draw to current command buffer. For OpenGL, regardless of the baseInstance value, gl_InstanceID always begins at 0. Render pass scope.- Specified by:
drawInstanced
in classCommandBuffer
- Parameters:
instanceCount
- the number of instances to drawbaseInstance
- the instance ID of the first instance to drawvertexCount
- the number of vertices to drawbaseVertex
- the index of the first vertex to draw
-
drawIndexedInstanced
public void drawIndexedInstanced(int indexCount, int baseIndex, int instanceCount, int baseInstance, int baseVertex) Description copied from class:CommandBuffer
Records an indexed draw to current command buffer. For OpenGL ES, if base vertex is unavailable, gl_VertexID always begins at 0. For OpenGL, regardless of the baseInstance value, gl_InstanceID always begins at 0. Render pass scope.- Specified by:
drawIndexedInstanced
in classCommandBuffer
- Parameters:
indexCount
- the number of vertices to drawbaseIndex
- the base index within the index bufferinstanceCount
- the number of instances to drawbaseInstance
- the instance ID of the first instance to drawbaseVertex
- the value added to the vertex index before indexing into the vertex buffer
-
begin
protected void begin()- Specified by:
begin
in classCommandBuffer
-
submit
- Specified by:
submit
in classCommandBuffer
-
checkFinishedAndReset
protected boolean checkFinishedAndReset()- Specified by:
checkFinishedAndReset
in classCommandBuffer
-
waitUntilFinished
protected void waitUntilFinished()Description copied from class:CommandBuffer
Blocks the current thread and waits for GPU to finish outstanding works.- Specified by:
waitUntilFinished
in classCommandBuffer
-