int kore(int argc, char** argv) { Kore::System::setName("Shader"); Kore::System::setup(); Kore::WindowOptions options; options.title = "Shader"; options.width = 1024; options.height = 768; options.x = 100; options.y = 100; options.targetDisplay = -1; options.mode = WindowModeWindow; options.rendererOptions.depthBufferBits = 16; options.rendererOptions.stencilBufferBits = 8; options.rendererOptions.textureFormat = 0; options.rendererOptions.antialiasing = 0; Kore::System::initWindow(options); Kore::System::setCallback(update); FileReader vs("shader.vert"); FileReader fs("shader.frag"); vertexShader = new Shader(vs.readAll(), vs.size(), VertexShader); fragmentShader = new Shader(fs.readAll(), fs.size(), FragmentShader); VertexStructure structure; structure.add("pos", Float3VertexData); program = new Program; program->setVertexShader(vertexShader); program->setFragmentShader(fragmentShader); program->link(structure); vertices = new VertexBuffer(3, structure); float* v = vertices->lock(); v[0] = -1; v[1] = -1; v[2] = 0.5; v[3] = 1; v[4] = -1; v[5] = 0.5; v[6] = -1; v[7] = 1; v[8] = 0.5; vertices->unlock(); indices = new IndexBuffer(3); int* i = indices->lock(); i[0] = 0; i[1] = 1; i[2] = 2; indices->unlock(); Kore::System::start(); return 0; }
void Graphics2::initShaders() { if (videoPipeline != nullptr) return; VertexStructure structure; structure.add("vertexPosition", Float3VertexData); structure.add("texPosition", Float2VertexData); structure.add("vertexColor", Float4VertexData); FileReader fs("painter-video.frag"); FileReader vs("painter-video.vert"); Shader* fragmentShader = new Shader(fs.readAll(), fs.size(), FragmentShader); Shader* vertexShader = new Shader(vs.readAll(), vs.size(), VertexShader); videoPipeline = new PipelineState(); videoPipeline->setFragmentShader(fragmentShader); videoPipeline->setVertexShader(vertexShader); // videoPipeline->inputLayout[0] = { &structure }; // videoPipeline->compile(); videoPipeline->link(structure); }
void initGraphics() { FileReader vs("shader.vert"); FileReader fs("shader.frag"); vertexShader = new Shader(vs.readAll(), vs.size(), VertexShader); fragmentShader = new Shader(fs.readAll(), fs.size(), FragmentShader); VertexStructure structure; structure.add("pos", Float3VertexData); structure.add("tex", Float2VertexData); program = new Program; program->setVertexShader(vertexShader); program->setFragmentShader(fragmentShader); program->link(structure); tex = program->getTextureUnit("tex"); texture = new Texture(width, height, Image::RGBA32, false); image = (int*)texture->lock(); for (int y = 0; y < texture->texHeight; ++y) { for (int x = 0; x < texture->texWidth; ++x) { image[y * texture->texWidth + x] = 0; } } texture->unlock(); // Correct for the difference between the texture's desired size and the actual power of 2 size float xAspect = (float)texture->width / texture->texWidth; float yAspect = (float)texture->height / texture->texHeight; vb = new VertexBuffer(4, structure, 0); float* v = vb->lock(); { int i = 0; v[i++] = -1; v[i++] = 1; v[i++] = 0.5; v[i++] = 0; v[i++] = 0; v[i++] = 1; v[i++] = 1; v[i++] = 0.5; v[i++] = xAspect; v[i++] = 0; v[i++] = 1; v[i++] = -1; v[i++] = 0.5; v[i++] = xAspect; v[i++] = yAspect; v[i++] = -1; v[i++] = -1; v[i++] = 0.5; v[i++] = 0; v[i++] = yAspect; } vb->unlock(); ib = new IndexBuffer(6); int* ii = ib->lock(); { int i = 0; ii[i++] = 0; ii[i++] = 1; ii[i++] = 3; ii[i++] = 1; ii[i++] = 2; ii[i++] = 3; } ib->unlock(); }