// finds the texture file or the color of the texture for a given surface // the following does not allow for multiple texture blending!!!! int Material::colorTexture(ostream &fout) const { MStatus status; int texcolor; MPlug colorPlug = MFnDependencyNode(shaderNode).findPlug("color"); MItDependencyGraph dgIt(colorPlug, MFn::kFileTexture, MItDependencyGraph::kUpstream, MItDependencyGraph::kBreadthFirst, MItDependencyGraph::kNodeLevel, &status); dgIt.disablePruningOnFilter(); if (!dgIt.isDone()) { // use a texture value MObject textureNode = dgIt.thisNode(); MPlug filenamePlug = MFnDependencyNode(textureNode).findPlug("fileTextureName"); MString textureName; filenamePlug.getValue(textureName); texcolor = ++textureNum; fout << "Texture \"" << texcolor << "\" \"color\" \"imagemap\" \"string filename\" [\"" << textureName.asChar() << "\"]" << endl; } else { // use a numerical value for the color MObject object; status = colorPlug.getValue(object); if (status != MStatus::kSuccess) { MGlobal::displayWarning("Could not get color value out"); return 0; } MFnNumericData colorData(object, &status); if (status != MStatus::kSuccess) { MGlobal::displayWarning("Could not get color value out (2)"); return 0; } if (colorData.numericType() == MFnNumericData::k3Float) { float r,g,b; colorData.getData(r,g,b); texcolor = ++textureNum; fout << "Texture \"" << texcolor << "\" \"color\" \"constant\" \"color value\" [" << r << " " << g << " " << b << "]" << endl; } else if (colorData.numericType() == MFnNumericData::k3Double) { double r,g,b; colorData.getData(r,g,b); texcolor = ++textureNum; fout << "Texture \"" << texcolor << "\" \"color\" \"constant\" \"color value\" [" << r << " " << g << " " << b << "]" << endl; } else { MGlobal::displayWarning("Invalid data tuple"); return 0; } } return texcolor; }
EditGroup::EditGroup(QString group,QWidget *parent,const char *name) : QDialog(parent,name,true) { QString sql; RDSqlQuery *q; // // Fix the Window Size // setMinimumWidth(sizeHint().width()); setMaximumWidth(sizeHint().width()); setMinimumHeight(sizeHint().height()); setMaximumHeight(sizeHint().height()); group_group=new RDGroup(group); setCaption(tr("Group: ")+group); // // Create Fonts // QFont font=QFont("Helvetica",12,QFont::Bold); font.setPixelSize(12); // // Text Validator // RDTextValidator *validator=new RDTextValidator(this,"validator"); // // Group Name // group_name_edit=new QLineEdit(this,"group_name_edit"); group_name_edit->setGeometry(165,11,100,19); group_name_edit->setMaxLength(10); group_name_edit->setReadOnly(true); QLabel *group_name_label=new QLabel(group_name_edit,tr("&Group Name:"),this, "group_name_label"); group_name_label->setGeometry(10,11,150,19); group_name_label->setFont(font); group_name_label->setAlignment(AlignRight|AlignVCenter|ShowPrefix); // // Group Description // group_description_edit=new QLineEdit(this,"group_description_edit"); group_description_edit->setGeometry(165,32,sizeHint().width()-175,19); group_description_edit->setMaxLength(255); group_description_edit->setValidator(validator); QLabel *group_description_label=new QLabel(group_description_edit, tr("Group &Description:"),this, "group_description_label"); group_description_label->setGeometry(10,32,150,19); group_description_label->setFont(font); group_description_label->setAlignment(AlignRight|AlignVCenter|ShowPrefix); // // Default Title // group_title_edit=new QLineEdit(this,"group_title_edit"); group_title_edit->setGeometry(165,53,sizeHint().width()-175,19); group_title_edit->setMaxLength(255); group_title_edit->setValidator(validator); QLabel *group_title_label=new QLabel(group_title_edit, tr("Default Import &Title:"),this, "group_title_label"); group_title_label->setGeometry(10,53,150,19); group_title_label->setFont(font); group_title_label->setAlignment(AlignRight|AlignVCenter|ShowPrefix); // // Default Cart Type // group_carttype_box=new QComboBox(this,"group_carttype_box"); group_carttype_box->setGeometry(165,74,100,19); group_carttype_box->insertItem(tr("Audio")); group_carttype_box->insertItem(tr("Macro")); QLabel *group_carttype_label=new QLabel(group_carttype_box, tr("Default Cart &Type:"),this, "group_carttype_label"); group_carttype_label->setGeometry(10,74,150,19); group_carttype_label->setFont(font); group_carttype_label->setAlignment(AlignRight|AlignVCenter|ShowPrefix); // // Default Cart Numbers // group_lowcart_box=new QSpinBox(this,"group_lowcart_box"); group_lowcart_box->setGeometry(165,95,70,19); group_lowcart_box->setRange(0,999999); group_lowcart_box->setSpecialValueText(tr("None")); QLabel *label=new QLabel(group_lowcart_box, tr("Default Cart Number:"),this, "group_lowcart_label"); label->setGeometry(10,95,150,19); label->setFont(font); label->setAlignment(AlignRight|AlignVCenter|ShowPrefix); group_highcart_box=new QSpinBox(this,"group_highcart_box"); group_highcart_box->setGeometry(265,95,70,19); group_highcart_box->setRange(1,999999); group_highcart_label=new QLabel(group_highcart_box, tr("to"),this, "group_highcart_label"); group_highcart_label->setGeometry(240,95,20,19); group_highcart_label->setFont(font); group_highcart_label->setAlignment(AlignCenter|ShowPrefix); connect(group_lowcart_box,SIGNAL(valueChanged(int)), this,SLOT(lowCartChangedData(int))); // // Enforce Cart Range Checkbox // group_enforcerange_box=new QCheckBox(this,"group_enforcerange_box"); group_enforcerange_box->setGeometry(20,118,15,15); group_enforcerange_label= new QLabel(group_enforcerange_box,tr("Enforce Cart Range"), this,"group_enforcerange_label"); group_enforcerange_label->setGeometry(40,118,sizeHint().width()-50,19); group_enforcerange_label->setFont(font); group_enforcerange_label->setAlignment(AlignLeft|AlignVCenter|ShowPrefix); // // Traffic Report Checkbox // group_traffic_box=new QCheckBox(this,"group_traffic_box"); group_traffic_box->setGeometry(20,145,15,15); label= new QLabel(group_traffic_box,tr("Include this group in Traffic reports"), this,"group_traffic_label"); label->setGeometry(40,143,sizeHint().width()-50,19); label->setFont(font); label->setAlignment(AlignLeft|AlignVCenter|ShowPrefix); // // Music Report Checkbox // group_music_box=new QCheckBox(this,"group_music_box"); group_music_box->setGeometry(20,166,15,15); label=new QLabel(group_music_box,tr("Include this group in Music reports"), this,"group_music_label"); label->setGeometry(40,164,sizeHint().width()-50,19); label->setFont(font); label->setAlignment(AlignLeft|AlignVCenter|ShowPrefix); // // Cut Autopurging // group_shelflife_box=new QCheckBox(this,"group_shelflife_box"); group_shelflife_box->setGeometry(20,193,15,15); connect(group_shelflife_box,SIGNAL(toggled(bool)), this,SLOT(purgeEnabledData(bool))); group_shelflife_spin=new QSpinBox(this,"group_shelflife_spin"); group_shelflife_spin->setGeometry(200,191,40,19); group_shelflife_spin->setRange(0,30); group_shelflife_label= new QLabel(group_shelflife_box,tr("Purge expired cuts after"), this,"group_shelflife_label"); group_shelflife_label->setGeometry(40,193,160,19); group_shelflife_label->setFont(font); group_shelflife_label->setAlignment(AlignLeft|AlignVCenter|ShowPrefix); group_shelflife_unit= new QLabel(group_shelflife_box,tr("days"),this,"group_shelflife_unit"); group_shelflife_unit->setGeometry(250,193,50,19); group_shelflife_unit->setFont(font); group_shelflife_unit->setAlignment(AlignLeft|AlignVCenter|ShowPrefix); // // Now & Next Data Checkbox // group_nownext_box=new QCheckBox(this,"group_nownext_box"); group_nownext_box->setGeometry(20,220,15,15); label=new QLabel(group_nownext_box,tr("Transmit Now && Next data"), this,"group_nownext_label"); label->setGeometry(40,219,sizeHint().width()-50,19); label->setFont(font); label->setAlignment(AlignLeft|AlignVCenter|ShowPrefix); // // Services Selector // group_svcs_sel=new RDListSelector(this,"group_svcs_sel"); group_svcs_sel->setGeometry(10,239,380,130); // // Color Button // group_color_button=new QPushButton(this,"group_colorbutton"); group_color_button->setGeometry(10,sizeHint().height()-60,80,50); group_color_button->setFont(font); group_color_button->setText(tr("C&olor")); connect(group_color_button,SIGNAL(clicked()),this,SLOT(colorData())); // // Ok Button // QPushButton *ok_button=new QPushButton(this,"ok_button"); ok_button->setGeometry(sizeHint().width()-180,sizeHint().height()-60,80,50); ok_button->setDefault(true); ok_button->setFont(font); ok_button->setText(tr("&OK")); connect(ok_button,SIGNAL(clicked()),this,SLOT(okData())); // // Cancel Button // QPushButton *cancel_button=new QPushButton(this,"cancel_button"); cancel_button->setGeometry(sizeHint().width()-90,sizeHint().height()-60, 80,50); cancel_button->setFont(font); cancel_button->setText(tr("&Cancel")); connect(cancel_button,SIGNAL(clicked()),this,SLOT(cancelData())); // // Populate Fields // group_name_edit->setText(group_group->name()); group_description_edit->setText(group_group->description()); group_title_edit->setText(group_group->defaultTitle()); group_carttype_box->setCurrentItem(group_group->defaultCartType()-1); group_lowcart_box->setValue(group_group->defaultLowCart()); group_highcart_box->setValue(group_group->defaultHighCart()); lowCartChangedData(group_group->defaultLowCart()); group_enforcerange_box->setChecked(group_group->enforceCartRange()); group_traffic_box->setChecked(group_group->exportReport(RDGroup::Traffic)); group_music_box->setChecked(group_group->exportReport(RDGroup::Music)); if(group_group->cutShelflife()>=0) { group_shelflife_spin->setValue(group_group->cutShelflife()); group_shelflife_box->setChecked(true); } purgeEnabledData(group_shelflife_box->isChecked()); group_nownext_box->setChecked(group_group->enableNowNext()); sql=QString().sprintf("select SERVICE_NAME from AUDIO_PERMS \ where GROUP_NAME=\"%s\"", (const char *)group_group->name()); q=new RDSqlQuery(sql); while(q->next()) { group_svcs_sel->destInsertItem(q->value(0).toString()); } delete q; sql=QString().sprintf("select NAME from SERVICES"); q=new RDSqlQuery(sql); while(q->next()) { if(group_svcs_sel->destFindItem(q->value(0).toString())==0) { group_svcs_sel->sourceInsertItem(q->value(0).toString()); } } delete q; SetButtonColor(group_group->color()); }
void PhongMat::Insert(std::ostream& fout) const { MStatus status; MObject object; /* for(int j = 0; j < shaderNode.attributeCount(); j++) { MPlug m = shaderNode.findPlug(shaderNode.attribute(j), false); std::cout << " " << shaderNode.attribute(j).apiTypeStr() << " " << " plug " << m.name() << std::endl; } std::cout << std::endl;*/ //MPlug reflectivityPlug = MFnDependencyNode(shaderNode).findPlug("reflectivity"); MPlug sigmaPlug = MFnDependencyNode(shaderNode).findPlug("cosinePower"); MPlug colorPlug = MFnDependencyNode(shaderNode).findPlug("color"); status = colorPlug.getValue(object); if (status != MStatus::kSuccess) { MGlobal::displayWarning("Could not get color value out"); } MFnNumericData colorData(object, &status); if (status != MStatus::kSuccess) { MGlobal::displayWarning("Could not get color value out (2)"); } MPlug specularPlug = MFnDependencyNode(shaderNode).findPlug("specularColor"); status = specularPlug.getValue(object); if (status != MStatus::kSuccess) { MGlobal::displayWarning("Could not get specular color value out"); } MFnNumericData specularData(object, &status); if (status != MStatus::kSuccess) { MGlobal::displayWarning("Could not get specular color data"); } fout << "Material \"phongmat\" "; if (colorData.numericType() == MFnNumericData::k3Float) { float r,g,b; colorData.getData(r,g,b); fout << "\"color rhod\" [" << r << " " << g << " " << b << "] "; } else if (colorData.numericType() == MFnNumericData::k3Double) { double r,g,b; colorData.getData(r,g,b); fout << "\"color rhod\" [" << r << " " << g << " " << b << "] "; } else { MGlobal::displayWarning("Invalid data type"); } if (specularData.numericType() == MFnNumericData::k3Float) { float r,g,b; specularData.getData(r,g,b); fout << "\"color rhos\" [" << r << " " << g << " " << b << "] "; } else if (specularData.numericType() == MFnNumericData::k3Double) { double r,g,b; specularData.getData(r,g,b); fout << "\"color rhos\" [" << r << " " << g << " " << b << "] "; } else { MGlobal::displayWarning("Invalid data type"); } float sigma; status = sigmaPlug.getValue(sigma); if (status == MStatus::kSuccess) fout << "\"float sigma\" [" << sigma << "] "; // sigma = cosine_power fout << std::endl; }
EditClock::EditClock(QString clockname,bool new_clock, std::vector<QString> *new_clocks,QWidget *parent) : QDialog(parent,"",true) { QString str; str=QString(tr("Edit Clock:")); setCaption(QString().sprintf("%s %s",(const char *)str, (const char *)clockname)); edit_name=clockname; edit_new_clock=new_clock; edit_new_clocks=new_clocks; // // Fix the Window Size // setMinimumWidth(sizeHint().width()); setMaximumWidth(sizeHint().width()); setMinimumHeight(sizeHint().height()); setMaximumHeight(sizeHint().height()); // // Create Fonts // QFont bold_font=QFont("Helvetica",12,QFont::Bold); bold_font.setPixelSize(12); QFont font=QFont("Helvetica",12,QFont::Normal); font.setPixelSize(12); edit_title_font=new QFont("Helvetica",24,QFont::Bold); edit_title_font->setPixelSize(24); edit_title_metrics=new QFontMetrics(*edit_title_font); // // Clock Names // edit_clockname_label=new QLabel(clockname,this); edit_clockname_label->setGeometry(10,10,280,20); edit_clockname_label->setFont(bold_font); edit_shortname_edit=new QLineEdit(this); edit_shortname_edit->setGeometry(350,10,40,20); edit_shortname_edit->setMaxLength(3); QLabel *label=new QLabel(edit_shortname_edit,tr("Code:"),this); label->setGeometry(295,10,50,20); label->setFont(bold_font); label->setAlignment(AlignRight|AlignVCenter); // // Clock List // edit_clocks_list=new ClockListView(this); edit_clocks_list->setGeometry(10,35,CENTER_LINE-20,sizeHint().height()-250); edit_clocks_list->setAllColumnsShowFocus(true); edit_clocks_list->setItemMargin(5); edit_clocks_list->addColumn(tr("Start")); edit_clocks_list->addColumn(tr("End")); edit_clocks_list->addColumn(tr("Event")); edit_clocks_list->addColumn(tr("Length")); edit_clocks_list->setColumnAlignment(3,AlignRight); edit_clocks_list->addColumn(tr("Count")); edit_clocks_list->setColumnAlignment(4,AlignCenter); connect(edit_clocks_list, SIGNAL(doubleClicked(QListViewItem *,const QPoint &,int)), this,SLOT(doubleClickedData(QListViewItem *,const QPoint &,int))); connect(edit_clocks_list,SIGNAL(selectionChanged(QListViewItem *)), this,SLOT(selectionChangedData(QListViewItem *))); connect(edit_clocks_list,SIGNAL(editLine(int)), this,SLOT(editEventData(int))); // // Add Button // QPushButton *button=new QPushButton(this); button->setGeometry(10,sizeHint().height()-210,80,50); button->setFont(bold_font); button->setText(tr("&Add")); connect(button,SIGNAL(clicked()),this,SLOT(addData())); // // Clone Button // button=new QPushButton(this); button->setGeometry(110,sizeHint().height()-210,80,50); button->setFont(bold_font); button->setText(tr("&Clone")); connect(button,SIGNAL(clicked()),this,SLOT(cloneData())); // // Edit Button // button=new QPushButton(this); button->setGeometry(210,sizeHint().height()-210,80,50); button->setFont(bold_font); button->setText(tr("&Edit")); connect(button,SIGNAL(clicked()),this,SLOT(editData())); // // Delete Button // button=new QPushButton(this); button->setGeometry(310,sizeHint().height()-210,80,50); button->setFont(bold_font); button->setText(tr("&Delete")); connect(button,SIGNAL(clicked()),this,SLOT(deleteData())); // // Remarks // edit_remarks_edit=new QTextEdit(this); edit_remarks_edit->setGeometry(10,sizeHint().height()-140,CENTER_LINE-20,130); edit_remarks_edit->setTextFormat(QTextEdit::PlainText); label=new QLabel(edit_remarks_edit,tr("Remarks"),this); label->setGeometry(15,sizeHint().height()-155,CENTER_LINE-20,15); label->setFont(bold_font); label->setAlignment(AlignLeft|AlignVCenter); // // Scheduler-Rules button // button=new QPushButton(this); button->setGeometry(CENTER_LINE+20,sizeHint().height()-60,70,50); button->setFont(bold_font); button->setText(tr("Scheduler\nRules")); connect(button,SIGNAL(clicked()),this,SLOT(schedRules())); // // Save Button // button=new QPushButton(this); button->setGeometry(CENTER_LINE+110,sizeHint().height()-60,70,50); button->setFont(bold_font); button->setText(tr("&Save")); connect(button,SIGNAL(clicked()),this,SLOT(saveData())); // // Save As Button // button=new QPushButton(this); button->setGeometry(CENTER_LINE+190,sizeHint().height()-60,70,50); button->setFont(bold_font); button->setText(tr("Save &As")); connect(button,SIGNAL(clicked()),this,SLOT(saveAsData())); // // Service Associations Button // button=new QPushButton(this); button->setGeometry(CENTER_LINE+(sizeHint().width()-CENTER_LINE)/2-25, sizeHint().height()-60,70,50); button->setFont(bold_font); button->setText(tr("&Services\nList")); connect(button,SIGNAL(clicked()),this,SLOT(svcData())); // // Color Button // edit_color_button=new QPushButton(this); edit_color_button-> setGeometry(CENTER_LINE+(sizeHint().width()-CENTER_LINE)/2+55, sizeHint().height()-60,70,50); edit_color_button->setFont(bold_font); edit_color_button->setText(tr("Colo&r")); connect(edit_color_button,SIGNAL(clicked()),this,SLOT(colorData())); // // Clock Display // edit_clock_label=new QLabel(this); edit_clock_label-> setGeometry(CENTER_LINE+10,10, sizeHint().width()-CENTER_LINE-20,sizeHint().height()-80); // // OK Button // button=new QPushButton(this); button->setGeometry(sizeHint().width()-160,sizeHint().height()-60,70,50); button->setDefault(true); button->setFont(bold_font); button->setText(tr("&OK")); connect(button,SIGNAL(clicked()),this,SLOT(okData())); // // Cancel Button // button=new QPushButton(this); button->setGeometry(sizeHint().width()-80,sizeHint().height()-60,70,50); button->setFont(bold_font); button->setText(tr("&Cancel")); connect(button,SIGNAL(clicked()),this,SLOT(cancelData())); // // Populate Data // sched_rules_list = new SchedRulesList(clockname); edit_clock=new RDClock(); edit_clock->setName(clockname); edit_clock->load(); edit_shortname_edit->setText(edit_clock->shortName()); if(edit_clock->color().isValid()) { edit_color_button-> setPalette(QPalette(edit_clock->color(),backgroundColor())); } edit_remarks_edit->setText(edit_clock->remarks()); edit_modified=false; RefreshList(); }
void SegmentationRenderer::draw(Matrix4f perspectiveMatrix, Matrix4f viewingMatrix, float zNear, float zFar, bool mode2D) { std::lock_guard<std::mutex> lock(mMutex); OpenCLDevice::pointer device = std::dynamic_pointer_cast<OpenCLDevice>(getMainDevice()); if(mColorsModified) { // Transfer colors to device (this doesn't have to happen every render call..) std::unique_ptr<float[]> colorData(new float[3*mLabelColors.size()]); std::unordered_map<int, Color>::iterator it; for(it = mLabelColors.begin(); it != mLabelColors.end(); it++) { colorData[it->first*3] = it->second.getRedValue(); colorData[it->first*3+1] = it->second.getGreenValue(); colorData[it->first*3+2] = it->second.getBlueValue(); } mColorBuffer = cl::Buffer( device->getContext(), CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, sizeof(float)*3*mLabelColors.size(), colorData.get() ); } if(mFillAreaModified) { // Transfer colors to device (this doesn't have to happen every render call..) std::unique_ptr<char[]> fillAreaData(new char[mLabelColors.size()]); std::unordered_map<int, Color>::iterator it; for(it = mLabelColors.begin(); it != mLabelColors.end(); it++) { if(mLabelFillArea.count(it->first) == 0) { // Use default value fillAreaData[it->first] = mFillArea; } else { fillAreaData[it->first] = mLabelFillArea[it->first]; } } mFillAreaBuffer = cl::Buffer( device->getContext(), CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, sizeof(char)*mLabelColors.size(), fillAreaData.get() ); } mKernel = cl::Kernel(getOpenCLProgram(device), "renderToTexture"); mKernel.setArg(2, mColorBuffer); mKernel.setArg(3, mFillAreaBuffer); mKernel.setArg(4, mBorderRadius); mKernel.setArg(5, mOpacity); for(auto it : mDataToRender) { Image::pointer input = std::static_pointer_cast<Image>(it.second); uint inputNr = it.first; if(input->getDimensions() != 2) throw Exception("SegmentationRenderer only supports 2D images. Use ImageSlicer to extract a 2D slice from a 3D image."); if(input->getDataType() != TYPE_UINT8) throw Exception("SegmentationRenderer only support images with dat type uint8."); // Check if a texture has already been created for this image if(mTexturesToRender.count(inputNr) > 0 && mImageUsed[inputNr] == input) continue; // If it has already been created, skip it // If it has not been created, create the texture OpenCLImageAccess::pointer access = input->getOpenCLImageAccess(ACCESS_READ, device); cl::Image2D *clImage = access->get2DImage(); // Run kernel to fill the texture cl::CommandQueue queue = device->getCommandQueue(); if (mTexturesToRender.count(inputNr) > 0) { // Delete old texture glDeleteTextures(1, &mTexturesToRender[inputNr]); mTexturesToRender.erase(inputNr); glDeleteVertexArrays(1, &mVAO[inputNr]); mVAO.erase(inputNr); } cl::Image2D image; cl::ImageGL imageGL; std::vector<cl::Memory> v; GLuint textureID; // TODO The GL-CL interop here is causing glClear to not work on AMD systems and therefore disabled /* if(DeviceManager::isGLInteropEnabled()) { // Create OpenGL texture glGenTextures(1, &textureID); glBindTexture(GL_TEXTURE_2D, textureID); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, input->getWidth(), input->getHeight(), 0, GL_RGBA, GL_FLOAT, 0); // Create CL-GL image imageGL = cl::ImageGL( device->getContext(), CL_MEM_READ_WRITE, GL_TEXTURE_2D, 0, textureID ); glBindTexture(GL_TEXTURE_2D, 0); glFinish(); mKernel.setArg(1, imageGL); v.push_back(imageGL); queue.enqueueAcquireGLObjects(&v); } else { */ image = cl::Image2D( device->getContext(), CL_MEM_READ_WRITE, cl::ImageFormat(CL_RGBA, CL_FLOAT), input->getWidth(), input->getHeight() ); mKernel.setArg(1, image); //} mKernel.setArg(0, *clImage); queue.enqueueNDRangeKernel( mKernel, cl::NullRange, cl::NDRange(input->getWidth(), input->getHeight()), cl::NullRange ); /*if(DeviceManager::isGLInteropEnabled()) { queue.enqueueReleaseGLObjects(&v); } else {*/ // Copy data from CL image to CPU auto data = make_uninitialized_unique<float[]>(input->getWidth() * input->getHeight() * 4); queue.enqueueReadImage( image, CL_TRUE, createOrigoRegion(), createRegion(input->getWidth(), input->getHeight(), 1), 0, 0, data.get() ); // Copy data from CPU to GL texture glGenTextures(1, &textureID); glBindTexture(GL_TEXTURE_2D, textureID); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, input->getWidth(), input->getHeight(), 0, GL_RGBA, GL_FLOAT, data.get()); glBindTexture(GL_TEXTURE_2D, 0); glFinish(); //} mTexturesToRender[inputNr] = textureID; mImageUsed[inputNr] = input; queue.finish(); } glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); drawTextures(perspectiveMatrix, viewingMatrix, mode2D); glDisable(GL_BLEND); }