Exemplo n.º 1
0
void
TextureManager::save_textures()
{
#if defined(GL_PACK_ROW_LENGTH) || defined(USE_GLBINDING)
  /* all this stuff is not support by OpenGL ES */
  glPixelStorei(GL_PACK_ROW_LENGTH, 0);
  glPixelStorei(GL_PACK_IMAGE_HEIGHT, 0);
  glPixelStorei(GL_PACK_SKIP_PIXELS, 0);
  glPixelStorei(GL_PACK_SKIP_ROWS, 0);
  glPixelStorei(GL_PACK_SKIP_IMAGES, 0);
#endif

  glPixelStorei(GL_PACK_ALIGNMENT, 1);

  for(Textures::iterator i = m_textures.begin(); i != m_textures.end(); ++i)
  {
    save_texture(*i);
  }

  for(ImageTextures::iterator i = m_image_textures.begin();
      i != m_image_textures.end(); ++i)
  {
    GLTexture* texture = dynamic_cast<GLTexture*>(i->second.lock().get());
    if(texture == NULL)
      continue;

    save_texture(texture);
  }
}
void
TextureManager::save_textures()
{
  glPixelStorei(GL_PACK_ROW_LENGTH, 0);
  glPixelStorei(GL_PACK_IMAGE_HEIGHT, 0);
  glPixelStorei(GL_PACK_SKIP_PIXELS, 0);
  glPixelStorei(GL_PACK_SKIP_ROWS, 0);
  glPixelStorei(GL_PACK_SKIP_IMAGES, 0);
  glPixelStorei(GL_PACK_ALIGNMENT, 1);
  for(Textures::iterator i = textures.begin(); i != textures.end(); ++i) {
    save_texture(*i);
  }
  for(ImageTextures::iterator i = image_textures.begin();
      i != image_textures.end(); ++i) {
    save_texture(i->second);
  }
}
Exemplo n.º 3
0
void Graphic_Util::save_texture_thumb(Gfx_Texture* tex, string name) {
	std::cout << "Save thumb " << name << std::endl;
	
	Gfx_Texture thumb;
	
	thumb.CreateRGBA(tex->GetWidth() / 3, tex->GetHeight() / 3);
	thumb.GenerateFrameBuffer();
	drawRect(tex, -1, -1, 1, 1, &thumb);
	
	save_texture(&thumb, name);
	
	std::cout << "End save thumb " << name << std::endl;
}
Exemplo n.º 4
0
int  main(int argc, char *argv[])
{
	CSKContext    csk_context;
	csk_context.init();
	//显示device 扩展
	char  *device_extension = nullptr;
	size_t  extension_length = 0;
	clGetDeviceInfo(csk_context._device, CL_DEVICE_EXTENSIONS, 0, nullptr,&extension_length);
	device_extension = new char[extension_length + 4];
	clGetDeviceInfo(csk_context._device, CL_DEVICE_EXTENSIONS, extension_length, device_extension,nullptr);
	int  index_j = 0;
	int  index_i = 0;
	char  extension[128];
	while (index_j < extension_length)
	{
		if (device_extension[index_j] != ' ')
			extension[index_i++] = device_extension[index_j];
		else
		{
			extension[index_i] = '\0';
			index_i = 0;
			printf("%s\n", extension);
		}
		++index_j;
	}
	delete[] device_extension;
	device_extension = nullptr;

	int  width = 0, height = 0;
	cl_mem   image_source = create_texture(csk_context._context, "image/global_img_heng4.tga",&width,&height);
	CL_ASSERT(image_source != nullptr,"create_texture error.");
	/*
	  *创建目标纹理
	 */
	int  result = 0;
	cl_image_format  image_format;
	image_format.image_channel_order = CL_RGBA;
	image_format.image_channel_data_type = CL_UNORM_INT8;
	cl_mem  target_image = clCreateImage2D(csk_context._context, CL_MEM_WRITE_ONLY,&image_format,width,height,0,nullptr,&result);
	CL_ASSERT(target_image!=nullptr && result ==CL_SUCCESS,"clCreateImage2D error.");
	/*
	  *创建采样器对象
	 */
	cl_sampler  sampler = clCreateSampler(csk_context._context,CL_FALSE,CL_ADDRESS_CLAMP_TO_EDGE,CL_FILTER_LINEAR,&result);
	CL_ASSERT(sampler!=nullptr && result == CL_SUCCESS,"clCreateSampler error");
	/*
	  *创建程序对象与内核
	 */
	cl_program   program = csk_context.createCLProgram("kernel/image_filter.cl");
	CL_ASSERT(program != nullptr,"createCLProgram error.");
	cl_kernel kernel= clCreateKernel(program, "gaussion_filter", &result);
	CL_ASSERT(kernel!=nullptr && result == CL_SUCCESS,"clCreateKernel error.");
	/*设置内核参数
	 */
	result = clSetKernelArg(kernel, 0, sizeof(cl_mem), &image_source);
	result |= clSetKernelArg(kernel, 1, sizeof(cl_mem), &target_image);
	result |= clSetKernelArg(kernel, 2, sizeof(cl_sampler),&sampler);
	result |= clSetKernelArg(kernel, 3, sizeof(cl_int), &width);
	result |= clSetKernelArg(kernel, 4, sizeof(cl_int), &height);
	CL_ASSERT(result == CL_SUCCESS,"clSetKernelArg error");
	//派发队列
	size_t localWorkSize[2] = {16,16};
	size_t globalWorkSize[2] = {ceil(width/16.0f) * 16,ceil(height/16.0f) * 16};
	cl_event  event = nullptr;
	result = clEnqueueNDRangeKernel(csk_context._commandQueue, kernel, 2, nullptr, globalWorkSize, localWorkSize, 0, nullptr, &event);
	clWaitForEvents(1, &event);

	char  *buffer = new char[width * height * 4];
	size_t origin_location[3] = {
		0,0,0
	};
	size_t region_rect[3] = {
		width,height,1,
	};
	result = clEnqueueReadImage(csk_context._commandQueue, target_image, CL_FALSE, origin_location, region_rect, 0, 0, buffer, 0, nullptr, &event);
	clWaitForEvents(1, &event);

	save_texture(csk_context._context, buffer, "image/global_img_heng4.png", width, height);
	delete[] buffer;
	buffer = nullptr;

	clReleaseSampler(sampler);
	clReleaseMemObject(image_source);
	clReleaseMemObject(target_image);
	clReleaseKernel(kernel);
	clReleaseProgram(program);

	getchar();
	return 0;
}