Ejemplo n.º 1
0
static MRESULT EXPENTRY AttribSelectProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
{
   PATTRIBSELECTDATA pWinData = WinQueryWindowPtr(hwnd, QWL_USER);

   switch(msg)
   {
      case WM_CREATE:
         return (MRESULT) CreateWindow(hwnd, (PCREATESTRUCT) mp2);

      case WM_DESTROY:
         DestroyWindow(pWinData);
         break;

      case WM_HELP:
         /* Weiterleiten mit eigener ID */
         mp1 = MPFROMSHORT(WinQueryWindowUShort(hwnd, QWS_ID));
         break;

      case ATTSM_SETATTRIB:
         return (MRESULT) SetAttrib(hwnd, pWinData, (ULONG) mp1, (ULONG) mp2);

      case ATTSM_QUERYATTRIB:
         return (MRESULT) QueryAttrib(pWinData);

      case WM_CONTROL:
         if (SHORT1FROMMP(mp1) == ATTSID_VALUE)
         {
            switch(SHORT2FROMMP(mp1))
            {
               case VN_ENTER:
                  AttribClicked(hwnd, pWinData, SHORT1FROMMP(mp2), SHORT2FROMMP(mp2));
                  break;

               case VN_HELP:
#if 0
                  WinPostMsg(WinQueryWindow(hwnd, QW_OWNER), WM_HELP,
                             MPFROMSHORT(WinQueryWindowUShort(hwnd, QWS_ID)),
                             mp2);
#endif
                  break;
            }
         }
         break;

      case WM_DRAWITEM:
         if (SHORT1FROMMP(mp1) == ATTSID_VALUE)
            return (MRESULT) DrawItem(pWinData, (POWNERITEM) mp2);
         else
            break;

      case WM_QUERYDLGCODE:
         return WinSendMsg(pWinData->hwndValueSet, msg, mp1, mp2);

      default:
         break;
   }
   return WinDefWindowProc(hwnd, msg, mp1, mp2);
}
Ejemplo n.º 2
0
bool RenderEngine::SetAttributes(VertexFormats * vertType, GLsizei stride)
{


	glDisableVertexAttribArray(0);
	glDisableVertexAttribArray(1);
	glDisableVertexAttribArray(2);
	glDisableVertexAttribArray(3);
	// pre-define some constants values to make the function calls slightly more readable
	const GLint     positionQuantity = 3;  // positions need 3 floats, XYZ
	const GLint     colorQuantity = 3;  // colors    need 3 floats, RGB -- TODO: Handle 4 floats RGBA ??
	const GLint     textureQuantity = 2;  // textures  need 2 floats, UV
	const GLint     normalQuantity = 3;  // normals   need 3 floats, XYZ



										 //const GLsizei   vertexStride = stride;  // example: 36 for position, color, normal = (3 + 3 + 3) * sizeof(float)
	GLuint         attribIndex = 0; // the current attrib

	GLsizei        currentOffset = 0; // NOTE: YOU MUST USE THE CORRECT VALUE HERE ...!?!?!?!?!?!,

	GLsizei        formatOffset = 0; // an offset into the current vertex format, always starts at 0



									 // NOTE: attribIndex and formatOffset are modified by SetAttrib()!!!
	if ((int)(*vertType) & (int)VertexFormats::HasPosition) SetAttrib(attribIndex, positionQuantity, stride, currentOffset, formatOffset);
	if ((int)(*vertType) & (int)VertexFormats::HasColor)
	{
		SetAttrib(attribIndex, colorQuantity, stride, currentOffset, formatOffset);
	}
	if ((int)(*vertType) & (int)VertexFormats::HasTexture)
	{
		SetAttrib(attribIndex, textureQuantity, stride, currentOffset, formatOffset);
	}
	if ((int)(*vertType) & (int)VertexFormats::HasNormal)   SetAttrib(attribIndex, normalQuantity, stride, currentOffset, formatOffset);

	//currentOffset += gob->GetNumVerts() * gob->GetStride; // you will need to update your own structure with this new offset

	// Other code goes here
	return true;
}
Ejemplo n.º 3
0
void glutInitDisplayString(const char *string)
{
   const char *p = string;
   int val;
   while(*p) {
      if(*p == ' ')
	 p++;
      else
      if(memcmp(p, "acca", 4) == 0) {
	 p = GetStrVal(p+4, &AccumSize, 1, 32);
	 SetAttrib(AccumSize, GLUT_ACCUM);
      } else
      if(memcmp(p, "acc", 3) == 0) {
	 p = GetStrVal(p+3, &AccumSize, 1, 32);
	 SetAttrib(AccumSize, GLUT_ACCUM);
      } else
      if(memcmp(p, "depth", 5) == 0) {
	 p = GetStrVal(p+5, &DepthSize, 12, 32);
	 SetAttrib(DepthSize, GLUT_DEPTH);
      } else
      if(memcmp(p, "double", 6) == 0) {
	 val = 1;
	 p = GetStrVal(p+6, &val, 0, 1);
	 SetAttrib(val, GLUT_DOUBLE);
      } else
      if(memcmp(p, "index", 5) == 0) {
	 val = 1;
	 p = GetStrVal(p+5, &val, 0, 1);
	 SetAttrib(val, GLUT_INDEX);
      } else
      if(memcmp(p, "stencil", 7) == 0) {
	 p = GetStrVal(p+7, &StencilSize, 0, 1);
	 SetAttrib(StencilSize, GLUT_STENCIL);
      } else
      if(memcmp(p, "samples", 7) == 0) {
	 NumSamples = 1;
	 p = GetStrVal(p+7, &NumSamples, 0, 16);
	 SetAttrib(NumSamples, GLUT_MULTISAMPLE);
      } else
      if(p = strchr(p, ' '))
         p++;
      else
	 break;
   }
}
Ejemplo n.º 4
0
void DeferredRenderer::SetCommonLightQuadDraw(Shader &shader) {
  Device *dev = Device::GetInstance();
  RenderState &render_state = dev->render_state();

  const mat4 &projection_mat = render_state.GetProjection3D();
  const mat4 &view_mat = render_state.view_mat();
  const mat4 &model_mat = render_state.model_mat();
  mat4 modelview = view_mat * model_mat;
  //벡터방향만 잇으면 되니까 이동관련속성은 날리기
  for(int i = 0 ; i < 3 ; ++i) {
    modelview[3][i] = 0;
  }
  vec4 viewport(0, 0, render_state.win_width(), render_state.win_height());

  float pixels[4][2] = {
    { 0, 0 },
    { viewport[2], 0 },
    { viewport[2], viewport[3] },
    { 0, viewport[3] },
  };
  vec3 view_vec_list[4];
  for(int i = 0 ; i < 4 ; i++) {
    vec3 win_coord(pixels[i][0], pixels[i][1], 10);
    vec3 obj = glm::unProject(win_coord, modelview, projection_mat, viewport);
    vec3 &view_vec = view_vec_list[i];
    view_vec = obj;
    vec3 cam_pos = MatrixHelper::ViewPos(view_mat);
    view_vec -= cam_pos;
    view_vec = glm::normalize(view_vec);

    mat3 modelview_mat3(modelview);
    view_vec = modelview_mat3 * view_vec;
    view_vec.z *= -1; //픽셀에서 cam_pos로 들어오는 방향으로 만들기 위해서 z뒤집음
  }

  //fragment마다 view vector를 계산하기 위해서 계산에 필요한 정보까지 넣기
  //4군데만 넣어주면 나머지는 알아서 적절히 보간될것이다
  struct LightQuadVertex {
    LightQuadVertex(float x, float y, float s, float t, const vec3 &view_vec)
      : pos(x, y), texcoord(s, t), view_vec(view_vec) {}
    vec2 pos;
    vec2 texcoord;
    vec3 view_vec;
  };
  vector<LightQuadVertex> vert_list;
  vert_list.push_back(LightQuadVertex(-1, -1, 0, 0, view_vec_list[0]));
  vert_list.push_back(LightQuadVertex(1, -1, 1, 0, view_vec_list[1]));
  vert_list.push_back(LightQuadVertex(1, 1, 1, 1, view_vec_list[2]));
  vert_list.push_back(LightQuadVertex(-1, 1, 0, 1, view_vec_list[3]));

  ShaderVariable pos_var = shader.attrib_var(kPositionHandleName);
  ShaderVariable texcoord_var = shader.attrib_var(kTexcoordHandleName);
  ShaderVariable view_vec_var = shader.attrib_var("a_viewVector");
  
  {
    SR_ASSERT(pos_var.location != kInvalidShaderVarLocation);
    AttribBindParam param;
    param.dim = 2;
    param.normalize = false;
    param.offset = offsetof(LightQuadVertex, pos);
    param.var_type = GL_FLOAT;
    param.vert_size = sizeof(LightQuadVertex);
    void *ptr = &vert_list[0];
    SetAttrib(pos_var, param, (char*)ptr);
  }
  {
    SR_ASSERT(texcoord_var.location != kInvalidShaderVarLocation);
    AttribBindParam param;
    param.dim = 2;
    param.normalize = false;
    param.offset = offsetof(LightQuadVertex, texcoord);
    param.var_type = GL_FLOAT;
    param.vert_size = sizeof(LightQuadVertex);
    void *ptr = &vert_list[0];
    SetAttrib(texcoord_var, param, (char*)ptr);
  }
  if(view_vec_var.location != kInvalidShaderVarLocation) {
    AttribBindParam param;
    param.dim = 3;
    param.normalize = true;
    param.offset = offsetof(LightQuadVertex, view_vec);
    param.var_type = GL_FLOAT;
    param.vert_size = sizeof(LightQuadVertex);
    void *ptr = &vert_list[0];
    SetAttrib(view_vec_var, param, (char*)ptr);
  }

  shader.DrawArrays(kDrawTriangleFan, vert_list.size());

  /*
  vector<Vertex2D> vert_list;
  vert_list.push_back(CreateVertex2D(-1, -1, 0, 0));
  vert_list.push_back(CreateVertex2D(1, -1, 1, 0));
  vert_list.push_back(CreateVertex2D(1, 1, 1, 1));
  vert_list.push_back(CreateVertex2D(-1, 1, 0, 1));
  shader.DrawArrays(kDrawTriangleFan, vert_list);
  */
}
int WindowLister( int x,
                  int y,
                  int xx,
                  int yy,
                  int CharToExitOn,
                  int *NumItems,
                  int NumToStartWith,
				  int (*CharHandler)(int ch, int Index),
                  void (*ScreenClearer)( void ),
                  void (*DisplayLineFunction)(int Index) )
{
    register int i;
    register int CurrLine = 0;
    int PrevLine;
    int NumLines = yy - y;
    int Top = NumToStartWith;
    int OldTop;
    int RefreshScreen = 1;
    int ch;
    union REGS regs, regs2;
    int Index;

    regs.x.cx = ( (y-1) << 8 ) + x-1;
    regs.x.dx = ( (yy-1) << 8 ) + xx-1;
    regs.x.ax = 0;
    regs.h.bh = A_NORMAL;
    regs.h.ah = 0x06;
    regs.x.ax = 1;

    for (;;) {

        if ( RefreshScreen ) {
            ScreenClearer();
            ChangeBlock( x, y, xx, yy, A_NORMAL );
            RefreshScreen = 0;
            PrevLine = 500;
            OldTop = -500;
            for (i=0; i<=NumLines; ++i) {
                gotoxy( x, i+y );
                if ( i+Top <= *NumItems )
                    DisplayLineFunction( i+Top );
            }
        }

        Index = CurrLine + Top;

        if ( PrevLine != CurrLine || OldTop != Top ) {
			SetAttrib( A_REVERSE );
            gotoxy( x, y + CurrLine );
            DisplayLineFunction( Index );
			SetAttrib( A_NORMAL );
        }
        HideCursor();

        PrevLine = CurrLine;
        OldTop = Top;

        ch = GComm();
        if ( ch == CharToExitOn ) return( Index );

        switch( ch ) {

			case ESC:
				return( -1 );

			case DOWN:
                CurrLine++;
                if (CurrLine > NumLines) {
                    CurrLine = NumLines;
                    if ( Top < *NumItems - NumLines ) {
                        Top++;
                           ChangeBlock( x, y, xx, yy, A_NORMAL );
                        regs.h.ah = 0x06;
                        int86( 0x10, &regs, &regs2 );
                        gotoxy( x, yy );
                    }
                }
                break;

            case UP:
                CurrLine--;
                if (CurrLine < 0) {
                    CurrLine=0;
                    if ( Top > 0 ) {
                        Top--;
                           ChangeBlock( x, yy, xx, yy, A_NORMAL );
                        regs.h.ah = 7;
                        int86( 0x10, &regs, &regs2 );
                        gotoxy( x, y );
                    }
                }
                break;

            case END:
                Top = *NumItems - NumLines;
                if ( Top < 0 ) {
                    Top = 0;
                }
                CurrLine = NumLines;
                if ( CurrLine > *NumItems ) {
                    CurrLine = *NumItems;
                }
                RefreshScreen++;
                break;

            case PGDN:
                Top += NumLines;
                if (Top > *NumItems - NumLines) {
                    Top = *NumItems - NumLines;
                    if ( Top < 0 )
                        Top = 0;
                    CurrLine = NumLines;
                    if ( CurrLine > *NumItems ) {
                        CurrLine = *NumItems;
                    }
                }
                RefreshScreen++;
                break;

            case PGUP:
                Top -= NumLines;
                if (Top < 0) {
                    Top = 0;
                    CurrLine = 0;
                }
                RefreshScreen++;
                break;

            case HOME:
                Top = CurrLine = 0;
                RefreshScreen++;
                break;

            default:
                gotoxy( x, CurrLine + y );
                ReverseText();
                DisplayLineFunction( Index );
                NormalText();
				/*HideCursor();*/
                RefreshScreen++;
				CurrLine = CharHandler( ch, Index );
				RefreshScreen = 1;
				if ( CurrLine - Top <= NumLines && CurrLine - Top >= 0 )
					CurrLine -= Top;
				else {
					Top = CurrLine - 1;
					CurrLine = 1;
					if ( Top < 0 ) {
						Top = CurrLine = 0;
					}
                }
                break;

        }
        if ( Top < 0 ) {
            Top = 0;
            CurrLine = 0;
        }
        if ( Top + CurrLine > *NumItems ) {
            CurrLine = *NumItems - Top;
        }
        if ( PrevLine != CurrLine || Top != OldTop ) {
            ChangeBlock( x, y, xx, yy, A_NORMAL );
        }
        if ( RefreshScreen > 1 ) {
            Top = CurrLine = 0;
        }
    }
}