SingularityDebugDrawer::SingularityDebugDrawer(xdl::IPXdevLRAI openGL, xdl::IPXdevLTextLayout textLayoutSystem) : m_openGL(openGL), m_textLayoutSystem(textLayoutSystem), m_debugMode(0) { vd = m_openGL->createVertexDeclaration(); vd->add(3, xdl::XDEVL_BUFFER_ELEMENT_FLOAT, VERTEX_POSITION); vd->add(3, xdl::XDEVL_BUFFER_ELEMENT_FLOAT, VERTEX_NORMAL); vd->add(3, xdl::XDEVL_BUFFER_ELEMENT_FLOAT, VERTEX_COLOR); m_linesVertexBuffer = m_openGL->createVertexBuffer(); m_linesVertexBuffer->init(); m_linesVertexArray = m_openGL->createVertexArray(); m_linesVertexArray->init(m_linesVertexBuffer, vd); m_pointsVertexBuffer = m_openGL->createVertexBuffer(); m_pointsVertexBuffer->init(); m_pointsVertexArray = m_openGL->createVertexArray(); m_pointsVertexArray->init(m_pointsVertexBuffer, vd); m_shaderProgram = m_openGL->createShaderProgram(); auto vertexShader = m_openGL->createVertexShader(); vertexShader->compileFromFile("resources/shaders/debug_vs.glsl"); auto fragmentShader = m_openGL->createFragmentShader(); fragmentShader->compileFromFile("resources/shaders/debug_fs.glsl"); m_shaderProgram->attach(vertexShader); m_shaderProgram->attach(fragmentShader); m_shaderProgram->link(); m_projMatrix = m_shaderProgram->getUniformLocation("projMatrix"); }
int main(int argc, char** argv) { xdl::IPXdevLCore core = xdl::createCore(); core->plug(xdl::XdevLPluginName("XdevLComputeDeviceCL"), xdl::XdevLVersion(0,1,0)); auto computeDevice = xdl::createModule<xdl::IPXdevLComputeDevice>(core, xdl::XdevLModuleName("XdevLComputeDevice"), xdl::XdevLID("MyComputeDevice")); // We need a context. auto context = computeDevice->createContext(); // We need a command queue to run commands. auto commandQueue = context->createCommandQueue(); auto program = context->createProgram(); auto inBuffer = context->createBuffer(xdl::XDEVL_COMPUTE_BUFFER_READ_ONLY, sizeof(float) * 10); auto outBuffer = context->createBuffer(xdl::XDEVL_COMPUTE_BUFFER_WRITE_ONLY, sizeof(float) * 10); // // Load and build the kernel. // auto kernel = program->compileFromFile(xdl::XdevLFileName("compute_device_demo.cl"), xdl::XdevLString("calculate_sqrt")); for(int a = 0; a < 100; a++) { kernel->setArgumentBuffer(0, inBuffer); kernel->setArgumentBuffer(1, outBuffer); kernel->setArgumentFloat(2, 2); inBuffer->upload(commandQueue.get(), sizeof(float) * 10, (xdl::xdl_uint8*)data); xdl::XdevLComputeExecuteParameter para(commandQueue.get(), kernel.get(), {32}); program->execute(para); // std::cout << "Before: " << std::endl; // for(auto item : data) { // std::cout << item << " : "; // } // std::cout << std::endl; outBuffer->download(commandQueue.get(), sizeof(float) * 10, (xdl::xdl_uint8*)data); std::cout << "After: " << std::endl; for(auto item : data) { std::cout << item << " : "; } std::cout << std::endl; } xdl::destroyCore(core); }