Thread with 6 posts
jump to expanded postyou know, it’s a shame that C is designed by ISO/IEC JTC1/SC22/WG14 and not the OpenGL Architecture Review Board. i’m sure we’d all rather write:
glDisable(GL_MASKING);
glEnableClientState(GL_SOURCE_DATA_ARRAY);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glSourceDataPointer(1, gl::UNSIGNED_BYTE, 1, dst_ptr);
glEnableClientState(GL_DESTINATION_DATA_ARRAY);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glDestinationDataPointer(1, gl::UNSIGNED_BYTE, 1, src_ptr);
glCopyBytes(0, num_bytes);
if (glGetError() != 0) {
// fuck
}
rather than
memcpy(dst_ptr, src_ptr, size);
@hikari
now do vulkan
@rectus alas i’ve not learned vulkan yet but i think it would probably be slightly less horrible
@hikari i'm learning vulkan right now by implementing it into my application alongside the already existing directx renderers, and it's even more verbose than directx 12
(i haven't learned opengl yet)
@rectus yeah i expect it’s very verbose, but at least it doesn’t have opengl’s goddamn state machine
@hikari it has asynchronous command recording and resource state barriers instead
copying stuff feels like having to do something like this:
VkCommandBufferBeginInfo beginInfo{ VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO };
beginInfo.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT;
vkBeginCommandBuffer(commandBuffer, &beginInfo);
vkCmdPipelineBarrier(commandBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, 0, 0, nullptr, 0, nullptr, 2, {src_barrier, dst_barrier});
vkCmdBindDescriptorSets(commandBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, bufferLayout, 0, 1, &descriptorSets, 0, nullptr);
vkCopyBuffers(1, &dst_buffer, 1, &src_buffer, offset, size, nullptr);
vkEndCommandBuffer(commandBuffer);
VkSubmitInfo submitInfo{ VK_STRUCTURE_TYPE_SUBMIT_INFO };
submitInfo.commandBufferCount = 1;
submitInfo.pCommandBuffers = &commandBuffer;
vkQueueSubmit(queue, 1, &submitInfo, VK_NULL_HANDLE);
vkQueueWaitIdle(queue);