Esempio n. 1
0
    void operator () () const {
        try {
            V v1 (N), v2 (N), v3 (N);
            (*this) (v1, v2, v3);

#ifdef USE_RANGE
            ublas::vector_range<V> vr1 (v1, ublas::range (0, N)),
                                   vr2 (v2, ublas::range (0, N)),
                                   vr3 (v3, ublas::range (0, N));
            (*this) (vr1, vr2, vr3);
#endif

#ifdef USE_SLICE
            ublas::vector_slice<V> vs1 (v1, ublas::slice (0, 1, N)),
                                   vs2 (v2, ublas::slice (0, 1, N)),
                                   vs3 (v3, ublas::slice (0, 1, N));
            (*this) (vs1, vs2, vs3);
#endif
        }
        catch (std::exception &e) {
            std::cout << e.what () << std::endl;
        }
        catch (...) {
            std::cout << "unknown exception" << std::endl;
        }
    }
Esempio n. 2
0
int CView::getElemPos(CViewState& vs)
{
int i;
int pos = getAddrLen()+1;
CViewState vs1(vs);

	if(vs.mode == 0) {
		for(i=0; i < vs.x; i++) {
			vs1.x = i;
			pos += getElemWidth(vs1);
			pos++;
		}
		return pos;
	}

	vs1.mode = 0;
	for(i=0; i < m.getNumElements(); i++) {
		vs1.x = i;
		pos += getElemWidth(vs1);
		pos++;
	}
	vs1.mode = 1;
	for(i=0; i < vs.x; i++) {
		vs1.x = i;
		pos += getElemWidth(vs1);
	}
	return pos;
}
Esempio n. 3
0
    void operator () () const {
        V v1 (N), v2 (N), v3 (N);
        test_expression_with (v1, v2, v3);
        test_container_with (v1);

#ifdef USE_RANGE
        ublas::vector_range<V> vr1 (v1, ublas::range (0, N)),
                               vr2 (v2, ublas::range (0, N)),
                               vr3 (v3, ublas::range (0, N));
        test_expression_with (vr1, vr2, vr3);
#endif

#ifdef USE_SLICE
        ublas::vector_slice<V> vs1 (v1, ublas::slice (0, 1, N)),
                               vs2 (v2, ublas::slice (0, 1, N)),
                               vs3 (v3, ublas::slice (0, 1, N));
        test_expression_with (vs1, vs2, vs3);
#endif
    }
	ShaderProgram::ShaderProgram(const char *vertex, const char *fragment, const ShaderFlags &flags)
	{
		File::uptr vs, fs;		
		
		v = glCreateShader(GL_VERTEX_SHADER);
		f = glCreateShader(GL_FRAGMENT_SHADER);
	
		uint64 size;

		vs = File::map(vertex, File::Read, &size);
		std::unique_ptr<char[]> vs1(new char[size + 1]);
		memcpy(vs1.get(), vs.get(), size * sizeof(char));
		vs1[size] = 0;

		fs = File::map(fragment, File::Read, &size);
		std::unique_ptr<char[]> fs1(new char[size + 1]);
		memcpy(fs1.get(), fs.get(), size * sizeof(char));
		fs1[size] = 0;

		//TODO: Może troszkę to ulepszyć... (Chodzi o to, że header trzeba dokleić po #version)
		const char * vv = vs1.get();
		std::string fscode = fs1.get();
		size_t ver = fscode.find("#version");
		ver = fscode.find("\n", ver);
		std::string ffs = fscode.substr(0, ver) + "\n" + flags.getHeader() + fscode.substr(ver + 1);
		const char * ff = ffs.c_str();

		glShaderSource(v, 1, &vv, NULL);
		glShaderSource(f, 1, &ff, NULL);

		GLint status;
		glCompileShader(v);
		glGetShaderiv(v, GL_INFO_LOG_LENGTH, &status);
		std::unique_ptr<GLchar[]> buffer(new GLchar[status]);
		glGetShaderInfoLog(v, status, &status, buffer.get());
		glGetShaderiv(v, GL_COMPILE_STATUS, &status);
		if(status != GL_TRUE)
			RAISE(ShaderException, "Error while compiling Vertex Shader!", buffer.get());
		else
			LOG(errorLogger, "Vertex Shader Info Log:%s\n", buffer.get());

		glCompileShader(f);
		glGetShaderiv(f, GL_INFO_LOG_LENGTH, &status);
		buffer = std::unique_ptr<GLchar[]>(new GLchar[status]);
		glGetShaderInfoLog(f, status, &status, buffer.get());
		glGetShaderiv(f, GL_COMPILE_STATUS, &status);
		if(status != GL_TRUE)
			RAISE(ShaderException, "Error while compiling Fragment Shader!", buffer.get());
		else
			LOG(errorLogger, "Fragment Shader Info Log:%s\n", buffer.get());

		p = glCreateProgram();

		glAttachShader(p, v);
		glAttachShader(p, f);
		
		glLinkProgram(p);

		glValidateProgram(p);

		glGetProgramiv(p, GL_INFO_LOG_LENGTH, &status);
		buffer = std::unique_ptr<GLchar[]>(new GLchar[status]);
		glGetProgramInfoLog(p, status, &status, buffer.get());
		glGetProgramiv(p, GL_VALIDATE_STATUS, &status);
		if(status != GL_TRUE)
			RAISE(ShaderException, "Error while linking / validating Shader Program!", buffer.get());
		else
			LOG(errorLogger, "Shader Program Info Log:%s\n", buffer.get());

		HASSERT(p && v && f);
	}
Esempio n. 5
0
int main ()
{
  printf ("Results of xmesh_saver_test:\n");
  
  try
  {
    VertexStream vs1 (4, make_vertex_declaration<CustomVertex> ());    

    CustomVertex* verts1 = vs1.Data<CustomVertex> ();

    if (verts1)
    {
      for (uint32_t i=0; i<vs1.Size (); i++)
      {
        verts1 [i].position  = vec3f  ((float)i, (float)i * 2, (float)i * 3);
        verts1 [i].normal    = vec3f  ((float)(i & 1), (float)((i + 1) & 1), 0);
        verts1 [i].texcoord0 = vec2f  (0, -(float)i, 0);
        verts1 [i].color     = vec4ub (0, i, 0, i);
        verts1 [i].tangent   = vec3f  (1.0f, 0.0f, 0.0f);
      }
    }
    
    VertexWeightStream vws (5);
    
    VertexWeight* weights = vws.Data ();
    
    for (uint32_t i=0; i<vws.Size (); i++)
    {
      weights [i].joint_index  = i;
      weights [i].joint_weight = float (i) / float (vws.Size ());
    }
    
    typedef Vertex<VertexInfluence, Position3f> MyVertex;
    
    VertexStream vs2 (4, make_vertex_declaration<MyVertex> ());
    
    MyVertex* verts2 = vs2.Data<MyVertex> ();
    
    if (verts2)
    {
      for (uint32_t i=0; i<vs1.Size (); i++)
      {
        verts2 [i].first_weight  = i;
        verts2 [i].weights_count = 1;
        verts2 [i].position      = 0.0f;
      }
    }
    
    IndexBuffer ib (5);
    
    for (uint32_t i=0; i<ib.Size (); i++)
      ib.Data<unsigned int> () [i] = i;

    Mesh mesh1;

    mesh1.Rename ("mesh1");
    
    VertexBuffer vb1;
    
    vb1.Attach (vs1);

    mesh1.Attach (vb1);
    mesh1.Attach (ib);
    
    mesh1.AddPrimitive (PrimitiveType_TriangleList, 0, 0, 1, "material1");
    mesh1.AddPrimitive (PrimitiveType_TriangleStrip, 0, 1, 1, "material2");

    Mesh mesh2;
    
    mesh2.Rename ("mesh2");
    
    VertexBuffer vb2;
    
    vb2.Attach (vs1);
    vb2.Attach (vs2);
    vb2.AttachWeights (vws);
    
    mesh2.Attach (vb2);
    
    mesh2.AddPrimitive (PrimitiveType_LineList, 0, 0, 1, "material1");
    mesh2.AddPrimitive (PrimitiveType_LineStrip, 0, 1, 2, "material2");    

    MeshLibrary mesh_library;

    mesh_library.Rename ("my_mesh_library");
    
    mesh_library.Attach ("mesh1", mesh1);
    mesh_library.Attach ("mesh2", mesh2);

    mesh_library.Save (DST_FILE_NAME);
  }
  catch (std::exception& exception)
  {
    printf ("exception: %s\n", exception.what ());
  }

  return 0;
}