VulkanDriver.hx 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package h3d.impl;
  2. import h3d.impl.Driver;
  3. #if (hlsdl && heaps_vulkan)
  4. class VulkanDriver extends Driver {
  5. var ctx : sdl.Vulkan.VKContext;
  6. var cur : hxsl.RuntimeShader;
  7. public function new() {
  8. ctx = @:privateAccess hxd.Window.getInstance().window.vkctx;
  9. if( !ctx.beginFrame() ) throw "assert";
  10. }
  11. override function hasFeature( f : Feature ) {
  12. return true;
  13. }
  14. override function isSupportedFormat( fmt : h3d.mat.Data.TextureFormat ) {
  15. return true;
  16. }
  17. override function logImpl(str:String) {
  18. #if sys
  19. Sys.println(str);
  20. #else
  21. trace(str);
  22. #end
  23. }
  24. override function isDisposed() {
  25. return false;
  26. }
  27. override function getDriverName( details : Bool ) {
  28. return "Vulkan";
  29. }
  30. override function present() {
  31. ctx.endFrame();
  32. if( !ctx.beginFrame() ) {
  33. var win = hxd.Window.getInstance();
  34. ctx.initSwapchain(win.width, win.height);
  35. if( !ctx.beginFrame() )
  36. throw "assert";
  37. }
  38. }
  39. override function init( onCreate : Bool -> Void, forceSoftware = false ) {
  40. onCreate(false);
  41. }
  42. override function selectShader( shader : hxsl.RuntimeShader ) {
  43. if( cur == shader ) return false;
  44. cur = shader;
  45. return true;
  46. }
  47. override function getShaderInputNames() : InputNames {
  48. var names = [];
  49. for( v in cur.vertex.data.vars )
  50. if( v.kind == Input )
  51. names.push(v.name);
  52. return InputNames.get(names);
  53. }
  54. override function begin(frame:Int) {
  55. sdl.Vulkan.clearColorImage(0, Math.random(), 0, 1);
  56. }
  57. override function allocTexture( t : h3d.mat.Texture ) : Texture {
  58. return cast {};
  59. }
  60. override function allocIndexes( count : Int, is32 : Bool ) : IndexBuffer {
  61. return cast {};
  62. }
  63. override function allocVertexes( m : ManagedBuffer ) : VertexBuffer {
  64. return cast {};
  65. }
  66. }
  67. #end