view examples/E01_hello_triangle.nim @ 594:512d33d314c4

add: correct swapchain destruction, update 1st example to be working
author Sam <sam@basx.dev>
date Thu, 20 Apr 2023 21:59:52 +0700
parents 21c276c0a968
children fdae5f50fa00
line wrap: on
line source

import std/strutils
import std/enumerate

import semicongine


const
  vertexInput = @[
    attr[Vec3f]("position", memoryLocation=VRAM),
    attr[Vec3f]("color", memoryLocation=VRAM),
  ]
  vertexOutput = @[attr[Vec3f]("outcolor")]
  fragOutput = @[attr[Vec4f]("color")]
  vertexCode = compileGlslShader(
    stage=VK_SHADER_STAGE_VERTEX_BIT,
    inputs=vertexInput,
    outputs=vertexOutput,
    main="""gl_Position = vec4(position, 1.0); outcolor = color;"""
  )
  fragmentCode = compileGlslShader(
    stage=VK_SHADER_STAGE_FRAGMENT_BIT,
    inputs=vertexOutput,
    outputs=fragOutput,
    main="color = vec4(outcolor, 1);"
  )

var
  triangle = newEntity(
    "triangle",
    newMesh(
      [newVec3f(-0.5, 0.5), newVec3f(0, -0.5), newVec3f(0.5, 0.5)],
      [X, Y, Z],
    )
  )
  myengine = initEngine("Hello triangle")
  renderPass = myengine.gpuDevice.simpleForwardRenderPass(vertexCode, fragmentCode)

myengine.setRenderer(renderPass)
myengine.addScene(triangle, vertexInput)

while myengine.running and not myengine.keyWasPressed(Escape):
  myengine.updateInputs()
  myengine.renderScene(triangle)

myengine.destroy()