GridTopology::Quad GridTopology::getQuadCopy(int i) { if (n.getValue()[0] == 1) { int y = i%(n.getValue()[1]-1); i/=(n.getValue()[1]-1); int z = i%(n.getValue()[2]-1); return getQuad(1,y,z); } else if (n.getValue()[1] == 1) { int x = i%(n.getValue()[0]-1); i/=(n.getValue()[0]-1); int z = i%(n.getValue()[2]-1); return getQuad(x,1,z); } else { int x = i%(n.getValue()[0]-1); i/=(n.getValue()[0]-1); int y = i%(n.getValue()[1]-1); return getQuad(x,y,1); } }
basic() { GLuint vertexArrayID; gl::GenVertexArrays(1, &vertexArrayID); gl::BindVertexArray(vertexArrayID); GLFWwindow *window = glfwGetCurrentContext(); handle = gl::CreateProgram(); frag = gl::CreateShader(gl::FRAGMENT_SHADER); csgo::glsl::compiler::compile(handle, frag, getFragShader()); vert = gl::CreateShader(gl::VERTEX_SHADER); csgo::glsl::compiler::compile(handle, vert, getVertShader()); gl::EnableVertexAttribArray(0); std::vector<GLfloat> quad = getQuad(); gl::GenBuffers(1, &positions); gl::BindBuffer(gl::ARRAY_BUFFER, positions); gl::BufferData(gl::ARRAY_BUFFER, (GLint)quad.size() * sizeof(GLfloat), quad.data(), gl::STATIC_DRAW); gl::VertexAttribPointer(0, 3, gl::FLOAT, gl::FALSE_, 0, nullptr); gl::EnableVertexAttribArray(1); std::vector<GLfloat> quad_uvs = getUVs(); gl::GenBuffers(1, &uvs); gl::BindBuffer(gl::ARRAY_BUFFER, uvs); gl::BufferData(gl::ARRAY_BUFFER, (GLint)quad_uvs.size() * sizeof(GLfloat), quad_uvs.data(), gl::STATIC_DRAW); gl::VertexAttribPointer(1, 2, gl::FLOAT, gl::FALSE_, 0, nullptr); }
//Update the color of a tile given x,y coords in tile coordinates void meshSystem::updateTileColor(int x, int y) { sf::Color color; if (SHOW_MATERIAL) { if (mesh[x][y].alpha == 1.22e-3f) color = COLOR_MAP[PYRITE]; else color = COLOR_MAP[ALUMINUM]; } else { if (mesh[x][y].isBorder) color = tempToColor(-1.0f); else color = tempToColor(mesh[x][y].nextTemperature); } sf::Vertex* quad = getQuad(x, y); //Set colors // define its 4 corners quad[0].color = color; quad[1].color = color; quad[2].color = color; quad[3].color = color; }
void FeaturesTracker::drawQuad(){ int i; const auto & pts = getQuad(); for (i=0; i<pts.size()-1; i++){ const Point2f & p = pts[i]; const Point2f & pn = pts[i+1]; ofLine(p.x, p.y, pn.x, pn.y); } ofLine(pts[i].x, pts[i].y, pts[0].x, pts[0].y); }
// ROGER //---------------------------------------------------------- void ofTexture::draw(const ofPoint & p1, const ofPoint & p2, const ofPoint & p3, const ofPoint & p4) const{ // make sure we are on unit 0 - we may change this when setting shader samplers // before glEnable or else the shader gets confused /// ps: maybe if bUsingArbTex is enabled we should use glActiveTextureARB? //glActiveTexture(GL_TEXTURE0); shared_ptr<ofBaseGLRenderer> renderer = ofGetGLRenderer(); if(renderer){ bind(0); renderer->draw(getQuad(p1,p2,p3,p4),OF_MESH_FILL); unbind(0); } }
void Chip::render(){ if (dt) { ExampleRenderer::getInstance().setColor(r, g, b, 255); } else{ ExampleRenderer::getInstance().setColor(r, g, b, 255); } ExampleRenderer::getInstance().drawImageQ("standardbg.png", getQuad("topleft"), vec2(dimension.pos.x-10,dimension.pos.y-10),0); ExampleRenderer::getInstance().drawImageQ("standardbg.png", getQuad("topright"), vec2(dimension.pos.x+dimension.size.x,dimension.pos.y-10),0); ExampleRenderer::getInstance().drawImageQ("standardbg.png", getQuad("botleft"), vec2(dimension.pos.x-10,dimension.pos.y+dimension.size.y),0); ExampleRenderer::getInstance().drawImageQ("standardbg.png", getQuad("botright"), vec2(dimension.pos.x+dimension.size.x,dimension.pos.y+dimension.size.y),0); ExampleRenderer::getInstance().drawImageQ("standardbg.png", getQuad("left"), vec2(dimension.pos.x-10,dimension.pos.y),0,vec2(1,dimension.size.y/10)); ExampleRenderer::getInstance().drawImageQ("standardbg.png", getQuad("right"), vec2(dimension.pos.x+dimension.size.x,dimension.pos.y),0,vec2(1,dimension.size.y/10)); ExampleRenderer::getInstance().drawImageQ("standardbg.png", getQuad("top"), vec2(dimension.pos.x,dimension.pos.y-10),0,vec2(dimension.size.x/10,1)); ExampleRenderer::getInstance().drawImageQ("standardbg.png", getQuad("bot"), vec2(dimension.pos.x,dimension.pos.y+dimension.size.y),0,vec2(dimension.size.x/10,1)); ExampleRenderer::getInstance().drawImageQ("standardbg.png", getQuad("mid"), vec2(dimension.pos.x,dimension.pos.y),0,vec2(dimension.size.x/10,dimension.size.y/10)); stringstream s; s << (int)chargeCount; ExampleRenderer::getInstance().setColor(255, 255, 255, 255); ExampleRenderer::getInstance().setFont("48"); ExampleRenderer::getInstance().printf(s.str(), dimension.pos,IW_2D_FONT_ALIGN_CENTRE,IW_2D_FONT_ALIGN_CENTRE,dimension.size); ExampleRenderer::getInstance().setFont("arial14"); if (generateRate) { s.str(""); s << (int)generateRate; ExampleRenderer::getInstance().printf(s.str(), dimension.pos); } ExampleRenderer::getInstance().resetColor(); if (dt) { ExampleRenderer::getInstance().setColor(255, 255, 255, 255); ExampleRenderer::getInstance().drawImage("button_glow.png", dimension.pos+vec2(dt*50,-8), 0,vec2(1,1),vec2(64,16)); ExampleRenderer::getInstance().drawImage("button_glow.png", dimension.pos+vec2(dt*25+dimension.size.x/2,-8), 0,vec2(1,2),vec2(64,16)); ExampleRenderer::getInstance().drawImage("button_glow.png", dimension.pos +vec2(dt*(-50)+dimension.size.x+16,dimension.size.y), 0,vec2(1,1),vec2(64,16)); } Widget::render(); }
void AttPanel::render(){ ExampleRenderer::getInstance().setColor(0, 0, 0, 100); ExampleRenderer::getInstance().drawImageQ("standardbg.png", getQuad("topleft"), vec2(dimension.pos.x-10,dimension.pos.y-10),0); ExampleRenderer::getInstance().drawImageQ("standardbg.png", getQuad("topright"), vec2(dimension.pos.x+dimension.size.x,dimension.pos.y-10),0); ExampleRenderer::getInstance().drawImageQ("standardbg.png", getQuad("botleft"), vec2(dimension.pos.x-10,dimension.pos.y+dimension.size.y),0); ExampleRenderer::getInstance().drawImageQ("standardbg.png", getQuad("botright"), vec2(dimension.pos.x+dimension.size.x,dimension.pos.y+dimension.size.y),0); ExampleRenderer::getInstance().drawImageQ("standardbg.png", getQuad("left"), vec2(dimension.pos.x-10,dimension.pos.y),0,vec2(1,dimension.size.y/10)); ExampleRenderer::getInstance().drawImageQ("standardbg.png", getQuad("right"), vec2(dimension.pos.x+dimension.size.x,dimension.pos.y),0,vec2(1,dimension.size.y/10)); ExampleRenderer::getInstance().drawImageQ("standardbg.png", getQuad("top"), vec2(dimension.pos.x,dimension.pos.y-10),0,vec2(dimension.size.x/10,1)); ExampleRenderer::getInstance().drawImageQ("standardbg.png", getQuad("bot"), vec2(dimension.pos.x,dimension.pos.y+dimension.size.y),0,vec2(dimension.size.x/10,1)); ExampleRenderer::getInstance().drawImageQ("standardbg.png", getQuad("mid"), vec2(dimension.pos.x,dimension.pos.y),0,vec2(dimension.size.x/10,dimension.size.y/10)); ExampleRenderer::getInstance().resetColor(); Widget::render(); }
//Initialize all verticies to their correct color and set up their positions void meshSystem::initVerticies() { for (int x = 0; x < WIN_TILE_WIDTH; x++) { for (int y = 0; y < WIN_TILE_HEIGHT; y++) { sf::Vertex* quad = getQuad(x, y); // define its 4 corners quad[0].position = sf::Vector2f(x * TILE_SIZE, y * TILE_SIZE); quad[1].position = sf::Vector2f(x * TILE_SIZE + TILE_SIZE, y * TILE_SIZE); quad[2].position = sf::Vector2f(x * TILE_SIZE + TILE_SIZE, y * TILE_SIZE + TILE_SIZE); quad[3].position = sf::Vector2f(x * TILE_SIZE, y * TILE_SIZE + TILE_SIZE); //Set colors updateTileColor(x, y); } } }
bool MainLayer::initUI() { _rootNode = CSLoader::createNode("MainScene.csb"); _hideNode = _rootNode->getChildByName<Node*>("Node_Main"); this->addChild(_rootNode); for (auto& child : LsTools::seekNodeByName(_rootNode, "Node_btn")->getChildren()) { auto btn = dynamic_cast<Button*>(child); btn->addTouchEventListener(CC_CALLBACK_2(MainLayer::clickMainBtn, this)); } _pageView = static_cast<PageView*>(LsTools::seekNodeByName(_rootNode, "PageView")); CCASSERT(_pageView, "page view"); _pageView->setCustomScrollThreshold(MY_SCREEN.width / 8); _pageView->setUsingCustomScrollThreshold(true); _pageView->addEventListener(CC_CALLBACK_2(MainLayer::pageViewEvent, this)); _pageView->setClippingType(Layout::ClippingType::SCISSOR); _mapFocusZOrder.clear(); for (ssize_t i = 0; i < PAGE_COUNT; i++) { auto page = _pageView->getPage(i); if (i == MAIN_PAGE) { for (auto& child : page->getChildren()) { //排除倒影 std::string::size_type idx = child->getName().find("dy_"); if (idx != std::string::npos) continue; _mapFocusZOrder.insert(std::pair<int, int>(child->getTag(), child->getLocalZOrder())); auto view = dynamic_cast<ImageView*>(child); view->addTouchEventListener(CC_CALLBACK_2(MainLayer::clickMainPageItem, this)); if (view->getTag() == 22){ _recommend = view; CC_SAFE_RETAIN(_recommend); } } } else if (i == MAIN_PAGE_PLUS){ for (auto& child : page->getChildren()) { //排除倒影 std::string::size_type idx = child->getName().find("dy_"); if (idx != std::string::npos) continue; _mapFocusZOrder.insert(std::pair<int, int>(child->getTag(), child->getLocalZOrder())); auto view = dynamic_cast<ImageView*>(child); view->addTouchEventListener(CC_CALLBACK_2(MainLayer::clickMainPlusPageItem, this)); } } else if (i == CATEGORY_PAGE) { for (auto& child : page->getChildren()) { std::string::size_type idx = child->getName().find("dy_"); if (idx != std::string::npos) continue; _mapFocusZOrder.insert(std::pair<int, int>(child->getTag(), child->getLocalZOrder())); auto view = dynamic_cast<ImageView*>(child); view->addTouchEventListener(CC_CALLBACK_2(MainLayer::clickCategoryPageItem, this)); } } else if (i == MANAGE_PAGE) { for (auto& child : page->getChildren()) { std::string::size_type idx = child->getName().find("dy_"); if (idx != std::string::npos) continue; _mapFocusZOrder.insert(std::pair<int, int>(child->getTag(), child->getLocalZOrder())); auto view = dynamic_cast<ImageView*>(child); if (view->getName() == "3") //Remote QR { CQR_Encode code; float size = 5.5f; std::string ip = PH::getPlatformIP(); std::string str = ZM->getServerAddress() + "?" + formatStr("commend=%d&xLinkIP=%s", CommendEnum::DOWNLOAD_REMOTE, ip.c_str()); LS_LOG("CQR_Encode:%s", str.c_str()); auto drawNode = LsTools::createQRAndDraw(code, size, LsTools::str2charp(str)); drawNode->setPosition(cocos2d::Vec2((view->getContentSize().width - size * code.m_nSymbleSize) / 2 - 6, view->getContentSize().height - (view->getContentSize().height - size * code.m_nSymbleSize) / 2 + 45)); view->addChild(drawNode); } else view->addTouchEventListener(CC_CALLBACK_2(MainLayer::clickManagerPageItem, this)); } } } _tabNode = _pageView->getPage(_pageView->getCurPageIndex()); _navi_Scelect = dynamic_cast<Sprite*>(LsTools::seekNodeByName(_rootNode, "Navi_Scelect")); _bg = _rootNode->getChildByName<Sprite*>("background"); //倒影 if (_isUseSpec) { initSpec(); for (int i = 0; i < PAGE_COUNT; i++) { auto sprite = dynamic_cast<Sprite*>(LsTools::seekNodeByName(_rootNode, formatStr("dy_%d", i))); sprite->setVisible(true); GLchar * fragSource = (GLchar*)String::createWithContentsOfFile( FileUtils::getInstance()->fullPathForFilename("blend.fsh").c_str())->getCString(); auto glprogram = GLProgram::createWithByteArrays(ccPositionTextureColor_noMVP_vert, fragSource); auto program = GLProgramState::getOrCreateWithGLProgram(glprogram); V3F_C4B_T2F_Quad quad = sprite->getQuad(); float minTex = (quad.tl.texCoords.v > quad.bl.texCoords.v ? quad.bl.texCoords.v : quad.tl.texCoords.v); float maxTex = (quad.tl.texCoords.v < quad.bl.texCoords.v ? quad.bl.texCoords.v : quad.tl.texCoords.v); program->setUniformFloat("minTex", minTex); program->setUniformFloat("maxTex", maxTex); sprite->setGLProgramState(program); } } return true; }
bool CPencil::getQuad(SQuadID quadid, SQuad *retQuad) { return getQuad(quadid.type, quadid.id, retQuad); }
CSulPassCombineTex::CSulPassCombineTex( osg::Texture2D* pTexIn0, osg::Texture2D* pTexIn1, osg::Texture2D* pTexOut ) : CSulPass( pTexIn0, pTexOut, "CombineTex" ) { m_rShader = new CSulShaderCombineTex( getQuad(), pTexIn0, pTexIn1 ); }
CSulPassCombineTex::CSulPassCombineTex( CSulTextureBuffer* texBuf0, CSulTextureBuffer* texBuf1 ) : CSulPass( texBuf0->getOut(), texBuf0->getIn(), "CombineTex" ) { m_rShader = new CSulShaderCombineTex( getQuad(), texBuf0->getOut(), texBuf1->getOut() ); texBuf0->swap(); }
void IsometryNode::Process() { m_entries.clear(); int32_t currentQuadIndex = 0; auto func = [&](CCNode* node) { auto sprite = dynamic_cast<CCSprite*>(node); if(sprite == nullptr) { return; } if(!sprite->isVisible()) { return; } sprite->updateTransform(); auto texture = sprite->getTexture()->getName(); auto quad = sprite->getQuad(); m_entries.push_back(IsometryNode::Entry(texture, quad)); currentQuadIndex++; }; Each((CCNode*)this, func); size_t entriesLeft = m_entries.size(); int beginIndex = 0; std::vector<bool> bitset(entriesLeft); size_t numBatches = 0; while (entriesLeft) { const bool debugOutput = false; if(debugOutput) { CCLOG("Batch %zi", numBatches); } m_buffer.Clear(); bool consecutive = true; const auto texture = m_entries[beginIndex].texture; if(debugOutput) { CCLOG("begin index = %zi(%zi)", beginIndex, texture); } for(size_t i = beginIndex; i < m_entries.size(); i++) { auto& quad = m_entries[i].quad; if(bitset[i]) { continue; } if(consecutive) { beginIndex = i; } consecutive = false; if(m_entries[i].texture != texture) { continue; } bool canSubmitQuad = true; for(int j = i - 1; j >= beginIndex; j--) { if(bitset[j]) { continue; } if(QuadOverlaps(quad, m_entries[j].quad)) { if(debugOutput) { CCLOG("Can't submit %zi(%zi) - itersects with %zi(%zi)", i, m_entries[i].texture, j, m_entries[j].texture); } canSubmitQuad = false; break; } else if(debugOutput) { CCLOG("%zi(%zi) doesn't itersects with %zi(%zi)", i, m_entries[i].texture, j, m_entries[j].texture); } } if(canSubmitQuad) { if(debugOutput) { CCLOG("Submiting %zi(%zi)", i, m_entries[i].texture); } m_buffer.AddQuad(quad); bitset[i] = true; if(i == beginIndex) { beginIndex++; } //DebugQuad(quad); entriesLeft--; } } if(m_buffer.Quads()) { if(debugOutput) { CCLOG("Drawing batch with %zi elements", m_buffer.Quads()); } getShaderProgram()->use(); m_buffer.DrawAll(texture); numBatches++; } } if(numBatches != m_numBatches) { m_numBatches = numBatches; CCLOG("IsometryNode has %zi batches", m_numBatches); } }
CSulPassGhost::CSulPassGhost( osg::Texture2D* pTexIn, osg::Texture2D* pTexOut ) : CSulPass( pTexIn, pTexOut, "Ghost" ) { m_rShader = new CSulShaderGhost( getQuad() ); }
CSulPassGhost::CSulPassGhost( CSulTextureBuffer* texBuf ) : CSulPass( texBuf->getOut(), texBuf->getIn(), "Ghost" ) { m_rShader = new CSulShaderGhost( getQuad() ); texBuf->swap(); }
CSulPassCombineTex::CSulPassCombineTex( osg::Texture2D* pTexIn0, CSulTextureBuffer* texBuf1, osg::Texture2D* pTexOut ) : CSulPass( pTexIn0, pTexOut, "CombineTex" ) { m_rShader = new CSulShaderCombineTex( getQuad(), pTexIn0, texBuf1->getOut() ); }
void SourceGLCanvas::doRender() { // TODO: Ceci est un hack necessaire car tout est en fonction de la width/height de la texture. // Il faut changer ca. std::tr1::shared_ptr<TextureMapping> textureMapping = std::tr1::static_pointer_cast<TextureMapping>(Common::currentMapping); wxASSERT(textureMapping != NULL); std::tr1::shared_ptr<Texture> texture = std::tr1::static_pointer_cast<Texture>(textureMapping->getPaint()); wxASSERT(texture != NULL); if (texture->getTextureId() == 0) { texture->loadTexture(); texture->setPosition( (GetClientSize().x - texture->getWidth()) / 2, (GetClientSize().y - texture->getHeight()) / 2 ); } // Now, draw // DRAW THE TEXTURE glPushMatrix(); // Enable blending mode (for alphas). glEnable (GL_BLEND); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glDisable (GL_LIGHTING); glEnable (GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, texture->getTextureId()); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // TODO: Exact projection of texture // see http://stackoverflow.com/questions/15242507/perspective-correct-texturing-of-trapezoid-in-opengl-es-2-0 // Draw source texture (not moving) in the center of the area. float centerX = GetClientSize().x / 2; float centerY = GetClientSize().y / 2; float textureHalfWidth = texture->getWidth() / 2; float textureHalfHeight = texture->getHeight() / 2; //printf("SRC: %f %f %f %f\n", centerX, centerY, textureHalfWidth, textureHalfHeight); glColor4f (1, 1, 1, 1.0f); glBegin (GL_QUADS); { glTexCoord2f (0, 0); glVertex3f (texture->getX(), texture->getY(), 0); glTexCoord2f (1, 0); glVertex3f (texture->getX()+texture->getWidth(), texture->getY(), 0); glTexCoord2f (1, 1); glVertex3f (texture->getX()+texture->getWidth(), texture->getY()+texture->getHeight(), 0); glTexCoord2f (0, 1); glVertex3f (texture->getX(), texture->getY()+texture->getHeight(), 0); } glEnd (); glDisable(GL_TEXTURE_2D); // Draw the quad. Quad& quad = getQuad(); glColor4f(1, 0, 0, 1); // Source quad. // Source quad. glLineWidth(5); glBegin (GL_LINE_STRIP); { for (int i=0; i<5; i++) { glVertex3f(quad.getVertex(i % 4).x, quad.getVertex(i % 4).y, 0); } } glEnd (); glPopMatrix(); }