// All threads start execution here. int main() { if (__builtin_nyuzi_read_control_reg(0) != 0) workerThread(); // Start worker threads __builtin_nyuzi_write_control_reg(30, 0xffffffff); RenderContext *context = new RenderContext(); RenderTarget *renderTarget = new RenderTarget(); Surface *colorBuffer = new Surface(kFbWidth, kFbHeight, (void*) 0x200000); Surface *depthBuffer = new Surface(kFbWidth, kFbHeight); renderTarget->setColorBuffer(colorBuffer); renderTarget->setDepthBuffer(depthBuffer); context->bindTarget(renderTarget); context->enableDepthBuffer(true); context->bindShader(new ColorShader()); const RenderBuffer kVertices(kTriangleVertices, 6, 7 * sizeof(float)); const RenderBuffer kIndices(kTriangleIndices, 6, sizeof(int)); context->bindGeometry(&kVertices, &kIndices); context->submitDrawCommand(); context->finish(); exit(1); // Stop worker threads return 0; }
int main() { RenderTarget *renderTarget = new RenderTarget(); Surface *colorBuffer = new (memalign(64, sizeof(Surface))) Surface(kFbWidth, kFbHeight, (void*) 0x200000); Surface *zBuffer = new (memalign(64, sizeof(Surface))) Surface(kFbWidth, kFbHeight); renderTarget->setColorBuffer(colorBuffer); renderTarget->setZBuffer(zBuffer); RenderContext *context = new RenderContext(renderTarget); VertexShader *vertexShader = new (memalign(64, sizeof(PhongVertexShader))) PhongVertexShader(); PixelShader *pixelShader = new PhongPixelShader(renderTarget); pixelShader->enableZBuffer(true); context->bindShader(vertexShader, pixelShader); PhongUniforms *uniforms = new PhongUniforms; uniforms->fLightVector[0] = 0.7071067811f; uniforms->fLightVector[1] = 0.7071067811f; uniforms->fLightVector[2] = 0.0f; uniforms->fDirectional = 0.6f; uniforms->fAmbient = 0.2f; context->bindUniforms(uniforms); Matrix projectionMatrix = Matrix::getProjectionMatrix(kFbWidth, kFbHeight); Matrix modelViewMatrix; Matrix rotationMatrix; context->bindGeometry(kTeapotVertices, kNumTeapotVertices, kTeapotIndices, kNumTeapotIndices); modelViewMatrix = Matrix::getTranslationMatrix(0.0f, 0.1f, 0.25f); modelViewMatrix = modelViewMatrix * Matrix::getRotationMatrix(M_PI, -1.0f, 0.0f, 0.0f); rotationMatrix = Matrix::getRotationMatrix(M_PI / 8, 0.707f, 0.707f, 0.0f); for (int frame = 0; frame < 1; frame++) { uniforms->fMVPMatrix = projectionMatrix * modelViewMatrix; uniforms->fNormalMatrix = modelViewMatrix.upper3x3(); context->renderFrame(); modelViewMatrix = modelViewMatrix * rotationMatrix; } return 0; }
// All threads start execution here. int main() { if (__builtin_nyuzi_read_control_reg(0) != 0) workerThread(); // Start worker threads __builtin_nyuzi_write_control_reg(30, 0xffffffff); RenderContext *context = new RenderContext(); RenderTarget *renderTarget = new RenderTarget(); Surface *colorBuffer = new Surface(kFbWidth, kFbHeight, (void*) 0x200000); Surface *depthBuffer = new Surface(kFbWidth, kFbHeight); renderTarget->setColorBuffer(colorBuffer); renderTarget->setDepthBuffer(depthBuffer); context->bindTarget(renderTarget); context->enableDepthBuffer(true); context->bindShader(new CheckerboardShader()); const RenderBuffer kVertices(kRoomVertices, kNumRoomVertices, 5 * sizeof(float)); const RenderBuffer kIndices(kRoomIndices, kNumRoomIndices, sizeof(int)); context->bindGeometry(&kVertices, &kIndices); Matrix projectionMatrix = Matrix::getProjectionMatrix(kFbWidth, kFbHeight); Matrix modelViewMatrix = Matrix::getRotationMatrix(M_PI / 3, Vec3(0.0f, 1.0f, 0.0f)); Matrix rotationMatrix = Matrix::getRotationMatrix(M_PI / 16, Vec3(0.0f, 1.0f, 0.0f)); for (int frame = 0; frame < 1; frame++) { CheckerboardUniforms uniforms; uniforms.fMVPMatrix = projectionMatrix * modelViewMatrix; context->bindUniforms(&uniforms, sizeof(uniforms)); context->submitDrawCommand(); context->finish(); modelViewMatrix *= rotationMatrix; } exit(1); // Stop worker threads return 0; }