Ejemplo n.º 1
0
void GSceneManager::drawShadow(GLuint& glui_shaderProgram)
{
    // Binde Tiefenmatrizen (aus Sicht der Lichtquelle)
    bindUniformDepthMatrices(glui_shaderProgram);
    
    // Betrachte zur Schattenberechnung
    drawShadow(sn_p_rootSceneNodeWorld, glui_shaderProgram);
    drawShadow(sn_p_rootSceneNodeDynamic, glui_shaderProgram);
    drawShadow(sn_p_rootSceneNodeInteract, glui_shaderProgram);
}
Ejemplo n.º 2
0
void MSLayout::computeSize(void)
{
  drawBackground();
  placement();
  positionLabel();
  drawShadow();  
}
Ejemplo n.º 3
0
void MSLayout::updateTitle(void)
{
  undrawShadow();
  label()->freeze();
  label()->foreground(titleForeground());
  int h=label()->height();
  int w=label()->width();

  label()->font(titleFont());
  MSBoolean doPlacement=MSFalse;
  label()->label(title());
  int ml=label()->columns();
  if (ml==0&&label()->mapped()==MSTrue)
   {
     label()->unmap();
     doPlacement=MSTrue;
   }
  else if (ml>0&&label()->mapped()==MSFalse)
   {
     label()->map();
     doPlacement=MSTrue;
   }
  positionLabel();
  label()->unfreeze();
  if (label()->height()!=h||label()->width()!=w||doPlacement==MSTrue) adjustSize();
  else if (label()->mapped()==MSTrue) label()->redraw();
  drawShadow();
}
Ejemplo n.º 4
0
void LabelImpl::draw(CL_GraphicContext &p_gc)
{
	G_ASSERT(m_parent->isLoaded());

	float ax, ay;
	const CL_Size s = m_parent->size(p_gc);

	calculateAttachPoint(s.width, s.height, ax, ay);

	CL_Pointf position;
	position.x = m_pos.x - ax;
	position.y = m_pos.y - ay - m_fontMetrics.get_descent();

	if (m_shadowVisible) {
		drawShadow(p_gc, position);
	}

	m_clFont->draw_text(p_gc, position.x, position.y, m_text, m_color);

#if !defined(NDEBUG) && defined(DRAW_LABEL_BOUNDS)
	// draw label frame debug code
	CL_Pen newPen;
	newPen.set_line_width(1.0f);

	const CL_Pen oldPen = p_gc.get_pen();
	p_gc.set_pen(newPen);

	const float y2 = y + m_fontMetrics.get_descent();
	CL_Draw::box(p_gc, x, y2 - s.height, x + s.width, y2, CL_Colorf::red);

	p_gc.set_pen(oldPen);
#endif // !NDEBUG && DRAW_LABEL_BOUNDS
}
void BaseShadowRenderImage::render(TSRenderContext &rc)      
{
   // don't get bit by matrix flag bug -- set translation flag just in case
   transform.flags |= TMat3F::Matrix_HasTranslation;

   rc.getCamera()->pushTransform(transform);

   if (!forcedDetailLevel)
      currentDetail = shape->selectDetail(rc);

   if (currentDetail == -1)
   {
      rc.getCamera()->popTransform();
      return;
   }

   if (animateShape)
      shape->animate();

   if (drawShape)
      shape->render(rc);

   rc.getCamera()->popTransform();

   if (castShadow && !IsEqual(shadowDetailScale,0.0f))
      drawShadow(rc);
}
Ejemplo n.º 6
0
/*
 * This function draws the widget.
 */
static void _drawCDKUScale (CDKOBJS *object, boolean Box)
{
    CDKUSCALE *widget = (CDKUSCALE *)object;

    /* Draw the shadow. */
    if (widget->shadowWin != 0)
    {
        drawShadow (widget->shadowWin);
    }

    /* Box the widget if asked. */
    if (Box)
    {
        drawObjBox (widget->win, ObjOf(widget));
    }

    drawCdkTitle (widget->win, object);

    /* Draw the label. */
    if (widget->labelWin != 0)
    {
        writeChtype (widget->labelWin, 0, 0,
                     widget->label,
                     HORIZONTAL, 0,
                     widget->labelLen);
        wrefresh (widget->labelWin);
    }
    wrefresh (widget->win);

    /* Draw the field window. */
    drawCDKUScaleField (widget);
}
Ejemplo n.º 7
0
void MSPrimitive::redraw(void)
{
  if (mapped()==MSTrue) 
   { 
     drawBackground(); 
     drawShadow();
   }
}
Ejemplo n.º 8
0
void MSArrowButton::redraw(void)
{
  if (mapped()==MSTrue)
   {
     drawShadow();
     arrow()->draw();
   }
}
Ejemplo n.º 9
0
void         Draw(GLContext	*_context)
{
	UserData      *_user = (UserData *)_context->userObject;
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	drawShadow(_context);
	drawShadowLight(_context);
//	Matrix  _identity;
//	_user->_testSprite->render(&_identity,_user->_lightRender->_depthTextureId);
}
Ejemplo n.º 10
0
void shadow::drawShadowShape(float spread)//int levels,
{
	//cout << "draw on top" << endl;-1
	fadeIndex++;
	if(fadeIndex== pathsShaderTopS.size()){
		fadeIndex = 0;
	}
	int i = fadeIndex;
	//	
	//for (int i = 0;i <pathsShaderTopS.size() - 1;i++) {
	
		int index = i;

		for (int j = 0;j < pathsShaderTopS.size();j++) {

			//&& j <index + levels
			//&& j <index + (pathsShaderTopS.size()-j)
			if ( j> index ) {
				masker.beginLayer(maskLayer);
				{
					//if (i == 0) 
					//ofClear(255, 255, 255, 0); 
					//ofClear(0, 0, 0, 255);
					ofClear(0, 0, 0, 255);
			
					ofSetColor(255, 255, 255);
					ofBackground(255, 255, 255, 0);

					drawShadow(spread + (j), spread*0.5, ofColor(0, 0, 0, 235), index);//- (5 * i) ))

				}
				masker.endLayer(maskLayer);

				//Draw mask #1

				masker.beginMask(maskLayer);
				{
					ofClear(0, 0, 0, 255);
					//ofClear(255, 255, 255, 0);
					//ofClear(255, 255, 255, 255);
					//ofBackground(255, 255, 255, 1 );
					ofSetColor(255, 255, 255); 
					if (j + 1 < pathsShaderTopS.size()) {
						for (int k = 0; k < pathsShaderTopS[j + 1].size();k++) {
							pathsShaderTopS[j + 1][k].setColor(ofColor(255, 255, 255));
							pathsShaderTopS[j + 1][k].draw();
						}
					}
					
				}masker.endMask(maskLayer);
				masker.draw();
			}
		}
	//}

}
Ejemplo n.º 11
0
void BackgroundWidget::paintEvent(QPaintEvent *)
{
    QStyleOption opt;
    opt.init(this);
    QPainter painter(this);
    style()->drawPrimitive(QStyle::PE_Widget, &opt, &painter, this);

    if (mHasShadow) {
        drawShadow(painter);
    }
}
Ejemplo n.º 12
0
/** Calls all the methods to draw a complete Dialog
  *
  * This method must be called by the subclasses.
  */
void RainbruRPG::Terminal::Dialog::drawDialog(){
  if (visible){
    drawEmpty();
    drawBorder();
    drawShadow();
    if (title.length()>0)
      drawTitle();
    
    drawCaption();
    drawButtons();
  }
}
Ejemplo n.º 13
0
 // функция отрисовки корабля
void Ship::draw(QPainter *painter)
{
    QPen pen; // карандаш(определяет контур фигур)
    QBrush brush; // кисть(определяет заливку фигур)
    if(conflicted) // корабль конфликтный
    {
        drawShadow(painter); // рисуем "тень"
        brush.setColor(Qt::red); // выбираем цвет заливки
    }
    else if(active) // корабль не конфликтный, но активный
    {
        drawShadow(painter); // рисуем "тень"
        brush.setColor(Qt::green); // выбираем цвет заливки
    }
    else
    {
        brush.setColor(Qt::blue); // выбираем цвет заливки
    }
    brush.setStyle(Qt::SolidPattern); // определяем стиль закраски фигур (SolidPattern - сплошная закраска)
    pen.setWidth(2); // устанавливаем толщину карандаша
    if(active)
        pen.setColor(Qt::darkGreen); // выбираем цвет заливки
    else
        pen.setColor(Qt::gray); // выбираем цвет заливки
    painter->setPen(pen); // передаем карандаш рисовальщику
    painter->setBrush(brush); // передаем кисть рисовальщику
    // отрисовываем все "квадраты" корабля в зависимости от его ориентации
    for(int i = 0 ; i < size ; i++)
    {
        switch(dir)
        {
        case HORIZONTAL:
            painter->drawRect(i * CELL + drawPoint.x(), drawPoint.y(), CELL, CELL);
            break;
        case VERTICAL:
            painter->drawRect(drawPoint.x(), i * CELL + drawPoint.y(), CELL, CELL);
            break;
        }
    }
}
Ejemplo n.º 14
0
/*
 * This function draws the scrolling list widget.
 */
static void _drawCDKScroll (CDKOBJS *object, boolean Box)
{
   CDKSCROLL *scrollp = (CDKSCROLL *)object;

   /* Draw in the shadow if we need to. */
   if (scrollp->shadowWin != 0)
      drawShadow (scrollp->shadowWin);

   drawCdkTitle (scrollp->win, object);

   /* Draw in the scolling list items. */
   drawCDKScrollList (scrollp, Box);
}
Ejemplo n.º 15
0
Archivo: fscale.c Proyecto: dyne/MuSE
/*
 * This function draws the scale widget.
 */
static void _drawCDKFScale (CDKOBJS *object, boolean Box)
{
   CDKFSCALE *scale = (CDKFSCALE *)object;
   int x;

   /* Draw the shadow. */
   if (scale->shadowWin != 0)
   {
      drawShadow (scale->shadowWin);
   }

   /* Box the widget if asked. */
   if (Box)
   {
      attrbox (scale->win,
		scale->ULChar, scale->URChar,
		scale->LLChar, scale->LRChar,
		scale->HChar,  scale->VChar,
		scale->BoxAttrib);
   }

   /* Draw in the title if there is one. */
   if (scale->titleLines != 0)
   {
      for (x=0; x < scale->titleLines; x++)
      {
	 writeChtype (scale->win,
			scale->titlePos[x],
			x + 1,
			scale->title[x],
			HORIZONTAL, 0,
			scale->titleLen[x]);
      }
   }

   /* Draw the label. */
   if (scale->labelWin != 0)
   {
      writeChtype (scale->labelWin, 0, 0,
			scale->label,
			HORIZONTAL, 0,
			scale->labelLen);
   }
   touchwin (scale->win);
   wrefresh (scale->win);

   /* Draw the field window. */
   drawCDKFScaleField (scale);
}
Ejemplo n.º 16
0
//-------------------------------------------------------------
void Polaroidframe::draw(){
    
    drawShadow();
    drawFrames();
    drawBottomBanner();
    drawPic();
    ofPushMatrix();
    ofTranslate(pos);
    ofRotateZ(angle);
    ofSetColor(color);
    ofRect(frame);
    ofPopMatrix();
    animation();
    
}
Ejemplo n.º 17
0
void Window::paintEvent(QPaintEvent *) {
	QPainter painter(this);
	if (_hasShadow) {
		drawShadow(painter, _borderWidth, _radius, QColor(120, 120, 120, 32), QColor(255, 255, 255, 0), 0.0, 1.0, 0.6, width(), height());
	} else {
		painter.setBrush(QColor("#FFFFFF"));
		painter.setPen(Qt::NoPen);
		painter.setRenderHint(QPainter::Antialiasing);

		QPainterPath path;
		path.setFillRule(Qt::WindingFill);
		path.addRoundedRect(QRect(0, 0, width(), height()), _radius, _radius);
		painter.drawPath(path.simplified());
	}
}
Ejemplo n.º 18
0
Archivo: fselect.c Proyecto: dyne/MuSE
/*
 * This draws the file selector widget.
 */
static void _drawCDKFselect (CDKOBJS *object, boolean Box GCC_UNUSED)
{
   CDKFSELECT *fselect = (CDKFSELECT *)object;

   /* Draw in the shadow if we need to. */
   if (fselect->shadowWin != 0)
   {
      drawShadow (fselect->shadowWin);
   }

   /* Draw in the entry field. */
   drawCDKEntry (fselect->entryField, ObjOf(fselect->entryField)->box);

   /* Draw in the scroll field. */
   drawCDKScroll (fselect->scrollField, ObjOf(fselect->scrollField)->box);
}
Ejemplo n.º 19
0
/*
 * This draws the file selector widget.
 */
static void _drawCDKAlphalist (CDKOBJS *obj, boolean Box GCC_UNUSED)
{
   CDKALPHALIST *alphalist = (CDKALPHALIST *)obj;

   /* Does this widget have a shadow? */
   if (alphalist->shadowWin != 0)
   {
      drawShadow (alphalist->shadowWin);
   }

   /* Draw in the entry field. */
   drawCDKEntry (alphalist->entryField, ObjOf (alphalist->entryField)->box);

   /* Draw in the scroll field. */
   drawMyScroller (alphalist);
}
Ejemplo n.º 20
0
/*
 * This draws the button widget.
 */
static void _drawCDKButton (CDKOBJS *object, boolean Box GCC_UNUSED)
{
   CDKBUTTON *button = (CDKBUTTON *)object;

   /* Is there a shadow? */
   if (button->shadowWin != (WINDOW *)NULL)
   {
      drawShadow (button->shadowWin);
   }

   /* Box the widget if asked. */
   if (ObjOf (button)->box)
   {
      drawObjBox (button->win, ObjOf (button));
   }
   drawCDKButtonText (button);
   wrefresh (button->win);
}
Ejemplo n.º 21
0
void GSceneManager::drawShadow(GSceneNode* sn_p_drawNode, GLuint& glui_shaderProgram)
{
    // Vertexliste zeichnen
    // Für alle Knoten zeichnen
    
    // Binde Modelmatrix
    bindUniformModelMatrix(sn_p_drawNode, glui_shaderProgram);
    
    for (GLuint glui_meshIter = 0; glui_meshIter < (sn_p_drawNode->returnNumOfMesh()); glui_meshIter++)
    {
        glBindVertexArray( sn_p_drawNode->returnMeshVA(glui_meshIter) );
        glDrawElements(GL_TRIANGLES, sn_p_drawNode->returnNumOfMeshFaces(glui_meshIter)*3 , GL_UNSIGNED_INT, 0);
    }
    
    //Rekursiv alle Kinderknoten aufrufen und zeichnen
    for (unsigned int ui_numNode = 0; ui_numNode < sn_p_drawNode->returnChildrenVector().size(); ui_numNode++)
    {
        drawShadow(sn_p_drawNode->returnChildrenVector()[ui_numNode], glui_shaderProgram);
    }
}
Ejemplo n.º 22
0
/*
 * This draws the marquee widget on the screen.
 */
static void _drawCDKMarquee (CDKOBJS *object, boolean Box)
{
   CDKMARQUEE *widget = (CDKMARQUEE *)object;

   /* Keep the box information. */
   ObjOf (widget)->box = Box;

   /* Do we need to draw a shadow??? */
   if (widget->shadowWin != 0)
   {
      drawShadow (widget->shadowWin);
   }

   /* Box it if needed. */
   if (Box)
   {
      drawObjBox (widget->win, ObjOf (widget));
   }

   /* Refresh the window. */
   wrefresh (widget->win);
}
Ejemplo n.º 23
0
Archivo: dialog.c Proyecto: dyne/MuSE
/*
 * This function draws the dialog widget.
 */
static void _drawCDKDialog (CDKOBJS *object, boolean Box)
{
   CDKDIALOG *dialog = (CDKDIALOG *)object;
   int x = 0;

   /* Is there a shadow? */
   if (dialog->shadowWin != 0)
   {
      drawShadow (dialog->shadowWin);
   }

   /* Box the widget if they asked. */
   if (Box)
   {
      attrbox (dialog->win,
		dialog->ULChar, dialog->URChar,
		dialog->LLChar, dialog->LRChar,
		dialog->HChar,	dialog->VChar,
		dialog->BoxAttrib);
   }

   /* Draw in the message. */
   for (x=0; x < dialog->messageRows; x++)
   {
      writeChtype (dialog->win,
			dialog->infoPos[x], x + 1,
			dialog->info[x],
			HORIZONTAL, 0,
			dialog->infoLen[x]);
   }

   /* Draw in the buttons. */
   drawCDKDialogButtons (dialog);

   /* Refresh the window. */
   touchwin (dialog->win);
   wrefresh (dialog->win);
}
Ejemplo n.º 24
0
void display(void)
{
 //時間計測
  static double time1, time2, drawTime, frame;
  if(ang <= 0.001) time1 = timeGetTime();

  //カラーバッファ,デプスバッファのクリア
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glLoadIdentity();//視点を変えるときはこの位置に必要
  if(cos(M_PI * view.theta /180.0) >= 0.0)//カメラ仰角90度でビューアップベクトル切替
	  gluLookAt(view.pos[0], view.pos[1], view.pos[2], view.cnt[0], view.cnt[1], view.cnt[2], 0.0, 1.0, 0.0);
  else
	  gluLookAt(view.pos[0], view.pos[1], view.pos[2], view.cnt[0], view.cnt[1], view.cnt[2], 0.0, -1.0, 0.0);

  //光源設定//'l'を押した後光源位置可変
  glLightfv(GL_LIGHT0, GL_POSITION, lightPos);

  glActiveTexture(GL_TEXTURE0);
  glBindTexture(GL_TEXTURE_3D, texName[0]);
  glActiveTexture(GL_TEXTURE1);
  glBindTexture(GL_TEXTURE_3D, texName[1]);
  // シェーダプログラムの適用 
  glUseProgram(shaderProg);
	GLint scaleLoc = glGetUniformLocation(shaderProg, "scale");
	glUniform1f(scaleLoc, scaleTex);
	GLint coordLoc = glGetUniformLocation(shaderProg, "coord");
	if(coord == OBJECT) glUniform1i(coordLoc, 0);
	else glUniform1i(coordLoc, 1);
  GLint texLoc = glGetUniformLocation(shaderProg, "smpl3D");
  glUniform1i(texLoc, 0);//GL_TEXTURE0を適用
  draw0(); 
  glUniform1i(texLoc, 1);//GL_TEXTURE1を適用
  draw1();
  // シェーダプログラムの適用を解除	
  glUseProgram(0);
  drawFloor0(10.0, 10.0, 10, 10);
  //影
  drawShadow();

  //回転角度更新
  ang += dang;
  if(ang >= 360.0)
  {
	time2 = timeGetTime();
	drawTime = (time2 - time1) * 0.001;//1回転当たりの描画時間
	printf("描画時間 = %4.4f[s] \n", drawTime);
	frame = (360.0 / dang) / drawTime;
	printf("フレーム数 = %4.4f[fps] \n", frame);
	ang = 0.0;
  }

  if(flagHelp)
  {
	printf("矢印キーによるアフィン変換/光源移動 \n");
	printf(" →,←:x軸 \n");
	printf(" ↑,↓:y軸 \n");
	printf(" [Shift]+↑,↓:z軸 \n");
	printf(" 'r'を押した後:回転 \n");
	printf(" 't'を押した後:平行移動 \n");
	printf(" 's'を押した後:スケーリング \n");
	printf(" 'l'を押した後、光源位置の移動可 \n");
	printf("マウス操作で視点変更可 \n");
	printf("  dolly:中央付近を左ボタンクリックで近づき,右ボタンクリックで遠ざかる \n");
	printf("  pan:左横および右横を右ボタンクリックで注視点が左右に変化する \n");
	printf("  tilt:真上および真下を右ボタンクリックで注視点が上下に変化する \n");
	printf("  tumble:左右にドラッグすると視点が左右に変化する \n");
	printf("  crane:上下にドラッグすると視点が上下に変化する \n");
	printf("  zoom:左下を右ボタンクリックでズームイン \n");
	printf("        右下を右ボタンクリックでズームアウト \n");
	printf("[Shift]+'r'でリセット \n");
	printf("[F1]キー:テクスチャの倍率調整 \n");
	printf("[F2]キー:座標系の切り替え \n");
	flagHelp = false;
  }
  //終了
  glutSwapBuffers();
}
Ejemplo n.º 25
0
void MapWidget::tfListenerProcess() 
{
	QPointF position;
	double heading = 0.0;

	bool shadow_changed = false;

	std::stringstream stream;

	while (ros::ok() && !tf_listener_thread_.interruption_requested()) 
	{
		if (getRobotPosition("/agent1/base_link", position, heading)) {

			drawShadow(position,heading);

			shadow_changed = true;

			emit tfChangedSignal("agent1", position, heading);
		}

		if (getRobotPosition("/agent2/base_link", position, heading)) {

			drawShadow(position,heading);

			shadow_changed = true;

			emit tfChangedSignal("agent2", position, heading);
		}

		if (getRobotPosition("/agent3/base_link", position, heading)) {

			drawShadow(position,heading);

			shadow_changed = true;

			emit tfChangedSignal("agent3", position, heading);
		}

		if (getRobotPosition("/agent4/base_link", position, heading)) {

			drawShadow(position,heading);

			shadow_changed = true;

			emit tfChangedSignal("agent4", position, heading);
		}

		if (getRobotPosition("/agent5/base_link", position, heading)) {

			drawShadow(position,heading);

			shadow_changed = true;

			emit tfChangedSignal("agent5", position, heading);
		}

		if (getRobotPosition("/agent6/base_link", position, heading)) {

			drawShadow(position,heading);

			shadow_changed = true;

			emit tfChangedSignal("agent6", position, heading);
		}

		if (getRobotPosition("/agent7/base_link", position, heading)) {

			drawShadow(position,heading);

			shadow_changed = true;

			emit tfChangedSignal("agent7", position, heading);
		}

		if (getRobotPosition("/agent8/base_link", position, heading)) {

			drawShadow(position,heading);

			shadow_changed = true;

			emit tfChangedSignal("agent8", position, heading);
		}

		if (getRobotPosition("/agent9/base_link", position, heading)) {

			drawShadow(position,heading);

			shadow_changed = true;

			emit tfChangedSignal("agent9", position, heading);
		}

		if (getRobotPosition("/agent10/base_link", position, heading)) {

			drawShadow(position,heading);

			shadow_changed = true;

			emit tfChangedSignal("agent10", position, heading);
		}

		if (true == shadow_changed)
		{
			shadow_changed = false;

			emit mapChangedSignal(map_shadow_);
		}

		boost::this_thread::sleep(boost::posix_time::milliseconds(200));
	}//while
}
Ejemplo n.º 26
0
/*!
  Sets the client's active state to \a act.

  This function does only change the visual appearance of the client,
  it does not change the focus setting. Use
  Workspace::activateClient() or Workspace::requestFocus() instead.

  If a client receives or looses the focus, it calls setActive() on
  its own.

 */
void Client::setActive( bool act, bool updateOpacity_)
    {
    if ( active == act )
        return;
    active = act;
    workspace()->setActiveClient( act ? this : NULL, Allowed );

    if (updateOpacity_) updateOpacity();
    if (isModal() && transientFor())
    {
        if (!act) transientFor()->updateOpacity();
        else if (!transientFor()->custom_opacity) transientFor()->setOpacity(options->translucentActiveWindows, options->activeWindowOpacity);
    }
    updateShadowSize();

    if ( active )
    {
        Notify::raise( Notify::Activate );
        if (options->shadowEnabled(true))
            {
            if (options->shadowEnabled(false))
                {
                // Wait for inactive shadow to expose occluded windows and give
                // them a chance to redraw before painting the active shadow
                removeShadow();
                drawDelayedShadow();
                if (!isDesktop() &&
                       this != workspace()->topClientOnDesktop(desktop()))
                    // If the newly activated window's isn't the desktop, wait
                    // for its shadow to draw, then redraw any shadows
                    // overlapping it.
                    drawOverlappingShadows(true);
                }
            else
                drawShadow();
            }
        }
    else
        {
        removeShadow();

        if (options->shadowEnabled(false))
            {
            if (this == workspace()->topClientOnDesktop(desktop()))
                {
                /* If the newly deactivated window is the top client on the
                 * desktop, then the newly activated window is below it; ensure
                 * that the deactivated window's shadow draws after the
                 * activated window's shadow.
                 */
                if ((shadowAfterClient = workspace()->activeClient()))
                    {
                    drawShadowAfter(shadowAfterClient);
                    }
                }
            else
                {
                drawDelayedShadow();
                }
            }
        }

    if( !active )
        cancelAutoRaise();

    if( !active && shade_mode == ShadeActivated )
        setShade( ShadeNormal );
        
    StackingUpdatesBlocker blocker( workspace());
    workspace()->updateClientLayer( this ); // active windows may get different layer
    // TODO optimize? mainClients() may be a bit expensive
    ClientList mainclients = mainClients();
    for( ClientList::ConstIterator it = mainclients.begin();
         it != mainclients.end();
         ++it )
        if( (*it)->isFullScreen()) // fullscreens go high even if their transient is active
            workspace()->updateClientLayer( *it );
    if( decoration != NULL )
        decoration->activeChange();
    updateMouseGrab();
    updateUrgency(); // demand attention again if it's still urgent
    }
Ejemplo n.º 27
0
void display(void)
{
 	//時間計測
  curTime = timeGetTime();
  float dt = (float)(curTime - lastTime) * 0.001;//secに変換
  elapseTime1 += dt;
  elapseTime2 += dt;
  fps ++;
		printf("elapseTime2 = %f \n", elapseTime2);
  if(elapseTime1 >= 1.0)
  {
		printf("frame per sec = %d \n", fps);
		elapseTime1 = 0.0;
		fps = 0;
  }
  lastTime = curTime;

	//波データを作成し、投影マップを設定
	if(kindWave == 0) makeWaveCircle(amp, elapseTime2);
	else if(kindWave == 1) makeWavePlane(amp, elapseTime2);
	else makeWaveMix(amp, elapseTime2);
	makeTexImage();
	setTexture();

  if(flagWireframe)//'w'でwireframeとsolid model切り替え
  {
	  glPolygonMode(GL_FRONT,GL_LINE);
	  glPolygonMode(GL_BACK,GL_POINT);
  }
  else glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);

	resize(width, height);
	//カラーバッファのクリア
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

  if(cos(M_PI * view.theta /180.0) > 0.0)//カメラ仰角90度でビューアップベクトル切替
	  gluLookAt(view.pos[0], view.pos[1], view.pos[2], view.cnt[0], view.cnt[1], view.cnt[2], 0.0, 1.0, 0.0);
  else
	  gluLookAt(view.pos[0], view.pos[1], view.pos[2], view.cnt[0], view.cnt[1], view.cnt[2], 0.0, -1.0, 0.0);

  //光源設定//'l'を押した後光源位置可変
  glLightfv(GL_LIGHT0, GL_POSITION, lightPos);

  //fragment shaderのユニフォーム変数インデックスを取得
  GLint texLoc = glGetUniformLocation(shaderProg, "smplCaustics");
  glUniform1i(texLoc, 0);//GL_TEXTURE0を適用
  // シェーダプログラムの適用 
  glUseProgram(shaderProg);

  //描画
	fish1.motion1(elapseTime2);
	fish2.motion1(elapseTime2);
	drawFloor0(10.0, 10.0, 10, 10);

  // シェーダプログラムの適用を解除	
  glUseProgram(0);

	//テクスチャ、半透明物体があるとき
	glDepthMask(GL_FALSE); //デプスバッファを書き込み禁止
	glEnable(GL_BLEND);//アルファブレンディングを有効にする
	glBlendFunc(GL_DST_ALPHA,GL_ONE_MINUS_SRC_ALPHA);//色混合係数を決める

	//半透明描画
	drawWave();
	//テクスチャ、半透明物体があるとき
	glDepthMask(GL_TRUE); //デプスバッファの書き込みを許可
	glDisable(GL_BLEND);
	
  //影
  drawShadow();

	drawLight();

  if(flagHelp)
  {
		printf("矢印キーによる光源/投影中心移動 \n");
		printf(" →,←:x軸 \n");
		printf(" ↑,↓:y軸 \n");
		printf(" [Shift]+↑,↓:z軸 \n");
		printf(" 'l'を押した後、光源位置の移動可 \n");
		printf("'w'でワイヤーフレームとソリッドモデル切り替え \n");
		printf("マウス操作で視点変更可 \n");
		printf("  dolly:中央付近を左ボタンクリックで近づき,右ボタンクリックで遠ざかる \n");
		printf("  pan:左横および右横を右ボタンクリックで注視点が左右に変化する \n");
		printf("  tilt:真上および真下を右ボタンクリックで注視点が上下に変化する \n");
		printf("  tumble:左右にドラッグすると視点が左右に変化する \n");
		printf("  crane:上下にドラッグすると視点が上下に変化する \n");
		printf("  zoom:左下を右ボタンクリックでズームイン \n");
		printf("        右下を右ボタンクリックでズームアウト \n");
		printf("[Shift]+'r'でリセット \n");
		printf("[F1]キー:投影マッピングの視野角fovの増減 \n");
		printf("[F2]キー:波の振幅amp \n");
		printf("[F3]キー:波の種類(円形波と平面波)の切り替え \n");
		printf("[F4]キー:円形波の個数切り替え \n");
		flagHelp = false;
  }
  //終了
  glutSwapBuffers();
}
Ejemplo n.º 28
0
void display(void)
{
  //時間計測
  static double time1, time2, drawTime, frame;
  if(ang <= 0.001) time1 = timeGetTime();

	//カラーバッファ,デプスバッファのクリア
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glLoadIdentity();//視点を変えるときはこの位置に必要
  if(cos(M_PI * view.theta /180.0) >= 0.0)//カメラ仰角90度でビューアップベクトル切替
	  gluLookAt(view.pos[0], view.pos[1], view.pos[2], view.cnt[0], view.cnt[1], view.cnt[2], 0.0, 1.0, 0.0);
  else
	  gluLookAt(view.pos[0], view.pos[1], view.pos[2], view.cnt[0], view.cnt[1], view.cnt[2], 0.0, -1.0, 0.0);

  if(flagWireframe)//'w'でwireframeとsolid model切り替え
  {
	  glPolygonMode(GL_FRONT,GL_LINE);
	  glPolygonMode(GL_BACK,GL_POINT);
  }
  else glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
	setLight();

  glUseProgram(shaderProg);
  //描画
  draw0(); draw1();
  drawFloor(20.0, 20.0, 20, 20);
  glUseProgram(0);
  //影
  drawShadow(0);//光源0に対する影
  drawShadow(1);//光源1に対する影
	//光源描画
	drawLight();
	drawSpotlight();

  //回転角度更新
  ang += dang;
  if(ang >= 360.0)
  {
		time2 = timeGetTime();
		//1回転当たりの描画時間
		drawTime = (time2 - time1) * 0.001;
		frame = (360.0 / dang) / drawTime;
		printf("フレーム数 = %4.4f[fps] \n", frame);
		//フレームあたりの描画時間
		drawTime = 1.0 / frame;
		printf("描画時間 = %4.4f[spf] \n", drawTime);		
		ang = 0.0;
  }

	if(flagHelp)
  {
		printf("矢印キーによるアフィン変換/光源移動 \n");
		printf(" →,←:x軸 \n");
		printf(" ↑,↓:y軸 \n");
		printf(" [Shift]+↑,↓:z軸 \n");
		printf(" 'r'を押した後:回転 \n");
		printf(" 't'を押した後:平行移動 \n");
		printf(" 's'を押した後:スケーリング \n");
		printf(" 'l'を押した後、光源位置の移動可 \n");
		printf("'w'でワイヤーフレームとソリッドモデル切り替え \n");
		printf("マウス操作で視点変更可 \n");
		printf("  dolly:中央付近を左ボタンクリックで近づき,右ボタンクリックで遠ざかる \n");
		printf("  pan:左横および右横を右ボタンクリックで注視点が左右に変化する \n");
		printf("  tilt:真上および真下を右ボタンクリックで注視点が上下に変化する \n");
		printf("  tumble:左右にドラッグすると視点が左右に変化する \n");
		printf("  crane:上下にドラッグすると視点が上下に変化する \n");
		printf("  zoom:左下を右ボタンクリックでズームイン \n");
		printf("        右下を右ボタンクリックでズームアウト \n");
		printf("[Shift]+'r'でリセット \n");
		printf("[Page Up]キー:回転角度+0.1 \n");
		printf("[Page Dn]キー:回転角度-0.1 \n");
		printf("[F1]:光源の減衰モード切りかえ \n");
		printf("[F2]キー:スポットライト指数調整 \n");
		printf("[F3]キー:スポットライトのカットオフ角度調整 \n");
		flagHelp = false;
  }
  //終了
  glutSwapBuffers();
}
Ejemplo n.º 29
0
void display(void)
{
  //時間計測
  static double time1, time2, drawTime, frame;
  if(ang <= 0.001) time1 = timeGetTime();

	//カラーバッファ,デプスバッファのクリア
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glLoadIdentity();//視点を変えるときはこの位置に必要
  if(cos(M_PI * view.theta /180.0) >= 0.0)//カメラ仰角90度でビューアップベクトル切替
	  gluLookAt(view.pos[0], view.pos[1], view.pos[2], view.cnt[0], view.cnt[1], view.cnt[2], 0.0, 1.0, 0.0);
  else
	  gluLookAt(view.pos[0], view.pos[1], view.pos[2], view.cnt[0], view.cnt[1], view.cnt[2], 0.0, -1.0, 0.0);

  //光源設定//'l'を押した後光源位置可変
  glLightfv(GL_LIGHT0, GL_POSITION, lightPos);

  if(flagWireframe)//'w'でwireframeとsolid model切り替え
  {
	  glPolygonMode(GL_FRONT,GL_LINE);
	  glPolygonMode(GL_BACK,GL_POINT);
  }
  else glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);

  glActiveTexture(GL_TEXTURE0);
  glBindTexture(GL_TEXTURE_2D, texName);

  //fragment shaderのユニフォーム変数texのインデックスを取得
  GLint texLoc = glGetUniformLocation(shaderProg, "sampler");
  glUniform1i(texLoc, 0);//GL_TEXTURE0を適用
  // シェーダプログラムの適用 
  glUseProgram(shaderProg);
  //描画
  draw0(); 
  draw1();
  drawFloor0(5.0, 5.0, 5, 5);
  // シェーダプログラムの適用を解除	
  glUseProgram(0);
  //影
  drawShadow();
  //回転角度更新
  ang += dang;
  if(ang >= 360.0)
  {
		time2 = timeGetTime();
		drawTime = (time2 - time1) * 0.001;
		frame = (360.0 / dang) / drawTime;
		printf("フレーム数 = %4.2f[fps] \n", frame);
		//フレームあたりの描画時間
		drawTime = 1.0 / frame;
		printf("描画時間 = %4.5f[spf] \n", drawTime);		
		ang = 0.0;
  }

	if(flagHelp)
  {
		printf("矢印キーによるアフィン変換/光源移動 \n");
		printf(" →,←:x軸 \n");
		printf(" ↑,↓:y軸 \n");
		printf(" [Shift]+↑,↓:z軸 \n");
		printf(" 'r'を押した後:回転 \n");
		printf(" 't'を押した後:平行移動 \n");
		printf(" 's'を押した後:スケーリング \n");
		printf(" 'l'を押した後、光源位置の移動可 \n");
		printf("マウス操作で視点変更可 \n");
		printf("  dolly:中央付近を左ボタンクリックで近づき,右ボタンクリックで遠ざかる \n");
		printf("  pan:左横および右横を右ボタンクリックで注視点が左右に変化する \n");
		printf("  tilt:真上および真下を右ボタンクリックで注視点が上下に変化する \n");
		printf("  tumble:左右にドラッグすると視点が左右に変化する \n");
		printf("  crane:上下にドラッグすると視点が上下に変化する \n");
		printf("  zoom:左下を右ボタンクリックでズームイン \n");
		printf("        右下を右ボタンクリックでズームアウト \n");
		printf("[Shift]+'r'でリセット \n");
		printf("[F1]キー:ラップモードの変更 \n");
		printf("[F2]キー:透視投影マッピングの視野角の変更 \n");
		printf("[F3]キー:投影中心の切り替え \n");
		printf("[F4]キー:テクスチャの回転ON/OFF \n");
		printf("[Page Up]キー:回転角度+0.1 \n");
		printf("[Page Dn]キー:回転角度-0.1 \n");
		flagHelp = false;
  }
  //終了
  glutSwapBuffers();
}
Ejemplo n.º 30
0
void display(void)
{
  //時間計測
  static double time1, time2, drawTime, frame;
  if(ang <= 0.001) time1 = timeGetTime();

	//step1:textureの作成
  glClearColor( 0.7, 0.6, 0.6, 1.0 );//背景色
  //framebuffer objectを有効化
	glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, fbName );
  glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
  glViewport( 0, 0, TEX_WIDTH, TEX_HEIGHT );
	glMatrixMode( GL_PROJECTION );
	glLoadIdentity();
  gluPerspective(fb_view.fovY, (double)TEX_WIDTH/(double)TEX_HEIGHT, 
	                                   fb_view.nearZ, fb_view.farZ);
	glMatrixMode( GL_MODELVIEW );
	glLoadIdentity();
	gluLookAt(fb_view.pos[0], fb_view.pos[1], fb_view.pos[2], fb_view.cnt[0], 
			                       fb_view.cnt[1], fb_view.cnt[2], 0.0, 1.0, 0.0);

  glUseProgram(shaderProg2);
	draw1();
	drawFloor(10.0, 10.0, 10, 10);
  glUseProgram(0);
	drawShadow(1);
  //framebuffer objectの無効化
	glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, 0 );

	//step2:通常にrendering
	resize(width, height);
  glClearColor(0.2, 0.2, 0.3, 1.0);//背景色
	//カラーバッファ,デプスバッファのクリア
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glLoadIdentity();//視点を変えるときはこの位置に必要
  if(cos(M_PI * view.theta /180.0) >= 0.0)//カメラ仰角90度でビューアップベクトル切替
	  gluLookAt(view.pos[0], view.pos[1], view.pos[2], view.cnt[0], view.cnt[1], view.cnt[2], 0.0, 1.0, 0.0);
  else
	  gluLookAt(view.pos[0], view.pos[1], view.pos[2], view.cnt[0], view.cnt[1], view.cnt[2], 0.0, -1.0, 0.0);

  //光源設定//'l'を押した後光源位置可変
  glLightfv(GL_LIGHT0, GL_POSITION, lightPos);

  //描画
  glBindTexture(GL_TEXTURE_2D, texName);
  glUseProgram(shaderProg1);
  GLint samplerLoc = glGetUniformLocation(shaderProg1, "sampler");
  glUniform1i(samplerLoc, 0);//GL_TEXTURE0を適用
  draw0();
  drawFloor(10.0, 10.0, 10, 10);
  glUseProgram(0);
  glBindTexture(GL_TEXTURE_2D, 0);

  //影
  drawShadow(0);

  //回転角度更新
  ang += dang;
  if(ang >= 360.0)
  {
		time2 = timeGetTime();
		//1回転当たりの描画時間
		drawTime = (time2 - time1) * 0.001;
		frame = (360.0 / dang) / drawTime;
		printf("フレーム数 = %4.2f[fps] \n", frame);
		//フレームあたりの描画時間
		drawTime = 1.0 / frame;
		printf("描画時間 = %4.5f[spf] \n", drawTime);		
		ang = 0.0;
  }

	if(flagHelp)
  {
		printf("矢印キーによるアフィン変換/光源移動 \n");
		printf(" →,←:x軸 \n");
		printf(" ↑,↓:y軸 \n");
		printf(" [Shift]+↑,↓:z軸 \n");
		printf(" 'r'を押した後:回転 \n");
		printf(" 't'を押した後:平行移動 \n");
		printf(" 's'を押した後:スケーリング \n");
		printf(" 'l'を押した後、光源位置の移動可 \n");
		printf("マウス操作で視点変更可 \n");
		printf("  dolly:中央付近を左ボタンクリックで近づき,右ボタンクリックで遠ざかる \n");
		printf("  pan:左横および右横を右ボタンクリックで注視点が左右に変化する \n");
		printf("  tilt:真上および真下を右ボタンクリックで注視点が上下に変化する \n");
		printf("  tumble:左右にドラッグすると視点が左右に変化する \n");
		printf("  crane:上下にドラッグすると視点が上下に変化する \n");
		printf("  zoom:左下を右ボタンクリックでズームイン \n");
		printf("        右下を右ボタンクリックでズームアウト \n");
		printf("[Shift]+'r'でリセット \n");
		printf("[Page Up]キー:回転角度+0.1 \n");
		printf("[Page Dn]キー:回転角度-0.1 \n");
		flagHelp = false;
  }
  //終了
  glutSwapBuffers();
}