예제 #1
0
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);
    }
}
예제 #2
0
파일: basic.hpp 프로젝트: daviddhas/CS-gO
	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);
 }
예제 #5
0
// 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);


		}
	}
}
예제 #9
0
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;
}
예제 #10
0
bool CPencil::getQuad(SQuadID quadid, SQuad *retQuad)
{
	return getQuad(quadid.type, quadid.id, retQuad);
}
예제 #11
0
CSulPassCombineTex::CSulPassCombineTex( osg::Texture2D* pTexIn0, osg::Texture2D* pTexIn1, osg::Texture2D* pTexOut ) :
CSulPass( pTexIn0, pTexOut, "CombineTex" )
{
	m_rShader = new CSulShaderCombineTex( getQuad(), pTexIn0, pTexIn1 );
}
예제 #12
0
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);
    }
}
예제 #14
0
CSulPassGhost::CSulPassGhost( osg::Texture2D* pTexIn, osg::Texture2D* pTexOut ) :
CSulPass( pTexIn, pTexOut, "Ghost" )
{
	m_rShader = new CSulShaderGhost( getQuad() );
}
예제 #15
0
CSulPassGhost::CSulPassGhost( CSulTextureBuffer* texBuf ) :
CSulPass( texBuf->getOut(), texBuf->getIn(), "Ghost" )
{
	m_rShader = new CSulShaderGhost( getQuad() );
	texBuf->swap();
}
예제 #16
0
CSulPassCombineTex::CSulPassCombineTex( osg::Texture2D* pTexIn0, CSulTextureBuffer* texBuf1, osg::Texture2D* pTexOut ) :
CSulPass( pTexIn0, pTexOut, "CombineTex" )
{
	m_rShader = new CSulShaderCombineTex( getQuad(), pTexIn0, texBuf1->getOut() );
}
예제 #17
0
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();
}