Ejemplo n.º 1
0
	StorageBuffer::StorageBuffer(GraphicContext &gc, const void *data, int size, int stride, BufferUsage usage)
		: impl(std::make_shared<StorageBuffer_Impl>())
	{
		GraphicContextProvider *gc_provider = gc.get_provider();
		impl->provider = gc_provider->alloc_storage_buffer();
		impl->provider->create(data, size, stride, usage);
	}
Ejemplo n.º 2
0
ShaderObject::ShaderObject(GraphicContext &gc, ShaderType type, const void *source, int source_size)
: impl(std::make_shared<ShaderObject_Impl>())
{
	GraphicContextProvider *gc_provider = gc.get_provider();
	impl->provider = gc_provider->alloc_shader_object();
	impl->provider->create(type, source, source_size);
}
Ejemplo n.º 3
0
UniformBuffer::UniformBuffer(GraphicContext &gc, const void *data, int size, BufferUsage usage)
    : impl(std::make_shared<UniformBuffer_Impl>())
{
    GraphicContextProvider *gc_provider = gc.get_provider();
    impl->provider = gc_provider->alloc_uniform_buffer();
    impl->provider->create(data, size, usage);
}
Ejemplo n.º 4
0
ShaderObject::ShaderObject(GraphicContext &gc, ShaderType type, const std::vector<std::string> &sources)
: impl(std::make_shared<ShaderObject_Impl>())
{
	GraphicContextProvider *gc_provider = gc.get_provider();
	impl->provider = gc_provider->alloc_shader_object();
	impl->provider->create(type, sources);
}
Ejemplo n.º 5
0
UniformBuffer::UniformBuffer(GraphicContext &gc, ProgramObject &program, const std::string &name, int num_blocks, BufferUsage usage)
    : impl(std::make_shared<UniformBuffer_Impl>())
{
    GraphicContextProvider *gc_provider = gc.get_provider();
    impl->provider = gc_provider->alloc_uniform_buffer();
    impl->provider->create(program.get_uniform_buffer_size(name) * num_blocks, usage);
}
Ejemplo n.º 6
0
ProgramObject::ProgramObject(GraphicContext &gc)
: impl(new ProgramObject_Impl)
{
	GraphicContextProvider *gc_provider = gc.get_provider();

	impl->provider = gc_provider->alloc_program_object();
}
Ejemplo n.º 7
0
TransferBuffer::TransferBuffer(GraphicContext &gc, const void *data, int size, BufferUsage usage)
: impl(new TransferBuffer_Impl)
{
	GraphicContextProvider *gc_provider = gc.get_provider();
	impl->provider = gc_provider->alloc_transfer_buffer();
	impl->provider->create((void*)data, size, usage);
}
Ejemplo n.º 8
0
VertexArrayBuffer::VertexArrayBuffer(GraphicContext &gc, const void *data, int size, BufferUsage usage)
: impl(std::make_shared<VertexArrayBuffer_Impl>())
{
	GraphicContextProvider *gc_provider = gc.get_provider();
	impl->provider = gc_provider->alloc_vertex_array_buffer();
	impl->provider->create((void*)data, size, usage);
}
Ejemplo n.º 9
0
TransferTexture::TransferTexture(GraphicContext &gc, const PixelBuffer &pbuff, PixelBufferDirection direction, BufferUsage usage)
{
	GraphicContextProvider *gc_provider = gc.get_provider();
	PixelBufferProvider *provider = gc_provider->alloc_pixel_buffer();
	*this = TransferTexture(provider);

	provider->create(pbuff.get_data(), pbuff.get_size(), direction, pbuff.get_format(), usage);
}
Ejemplo n.º 10
0
TransferTexture::TransferTexture(GraphicContext &gc, int width, int height, PixelBufferDirection direction, TextureFormat texture_format, const void *data, BufferUsage usage)
{
	GraphicContextProvider *gc_provider = gc.get_provider();
	PixelBufferProvider *provider = gc_provider->alloc_pixel_buffer();
	*this = TransferTexture(provider);

	provider->create(data, Size(width, height), direction, texture_format, usage);
}
Ejemplo n.º 11
0
	RenderBuffer::RenderBuffer(GraphicContext &context, int width, int height, TextureFormat texture_format, int multisample_samples)
		: impl(std::make_shared<RenderBuffer_Impl>())
	{
		GraphicContextProvider *gc_provider = context.get_provider();
		impl->provider = gc_provider->alloc_render_buffer();
		impl->provider->create(width, height, texture_format, multisample_samples);
		impl->size.width = width;
		impl->size.height = height;
	}
void D3DStorageBufferProvider::upload_data(GraphicContext &gc, const void *data, int data_size)
{
	if (data_size != size)
		throw Exception("Upload data size does not match vertex array buffer");

	const ComPtr<ID3D11Device> &device = static_cast<D3DGraphicContextProvider*>(gc.get_provider())->get_window()->get_device();
	ComPtr<ID3D11DeviceContext> device_context;
	device->GetImmediateContext(device_context.output_variable());
	device_context->UpdateSubresource(get_handles(device).buffer, 0, 0, data, 0, 0);
}
void D3DTransferBufferProvider::lock(GraphicContext &gc, BufferAccess access)
{
	map_device = static_cast<D3DGraphicContextProvider*>(gc.get_provider())->get_window()->get_device();

	ComPtr<ID3D11DeviceContext> context;
	map_device->GetImmediateContext(context.output_variable());

	HRESULT result = context->Map(handles.front()->buffer, 0, to_d3d_map_type(access), 0, &map_data);
	D3DTarget::throw_if_failed("ID3D11DeviceContext.Map failed", result);
}
Ejemplo n.º 14
0
	Texture2DArray::Texture2DArray(GraphicContext &context, const Size &size, int array_size, TextureFormat texture_format, int levels)
		: Texture(std::shared_ptr<Texture_Impl>(new Texture_Impl))
	{
		if ((size.width <= 0) || (size.height <= 0))
			throw Exception("An attempt was made to create a Texture with an invalid size");

		GraphicContextProvider *gc_provider = context.get_provider();
		impl->provider = gc_provider->alloc_texture(texture_2d_array);
		impl->provider->create(size.width, size.height, 1, array_size, texture_format, levels);
		impl->width = size.width;
		impl->height = size.height;
		impl->array_size = array_size;

		impl->provider->set_wrap_mode(impl->wrap_mode_s, impl->wrap_mode_t);
	}
Ejemplo n.º 15
0
TextureCube::TextureCube(GraphicContext &context, int width, int height, TextureFormat texture_format, int levels)
: Texture(std::shared_ptr<Texture_Impl>(new Texture_Impl))
{
	if ( (width<=0) || (height<=0) )
	{
		throw Exception("An attempt was made to create a Texture with an invalid size");
	}

	GraphicContextProvider *gc_provider = context.get_provider();

	impl->provider = gc_provider->alloc_texture(texture_cube);
	impl->provider->create(width, height, 1, 1, texture_format, levels);
	impl->width = width;
	impl->height = height;

	impl->provider->set_wrap_mode(impl->wrap_mode_s, impl->wrap_mode_t);
}
Ejemplo n.º 16
0
PixelBuffer D3DTextureProvider::get_pixeldata(GraphicContext &gc, TextureFormat texture_format, int level) const
{
	D3DGraphicContextProvider *gc_provider = static_cast<D3DGraphicContextProvider*>(gc.get_provider());
	D3DTextureData::DeviceHandles &data_handles = data->get_handles(gc_provider->get_window()->get_device());

	int width;
	int height;
	DXGI_FORMAT format;

	if (data_handles.texture_type == D3DTextureData::cl_ID3D11Texture1D)
	{
		D3D11_TEXTURE1D_DESC texture_desc;
		data_handles.get_texture_1d()->GetDesc(&texture_desc);

		width = max(texture_desc.Width >> level, (UINT)1);
		height = 1;
		format = texture_desc.Format;
	}
Ejemplo n.º 17
0
Texture3D::Texture3D(GraphicContext &context, const Vec3i &size, TextureFormat texture_format, int levels)
: Texture(std::shared_ptr<Texture_Impl>(new Texture_Impl))
{
	if ( (size.x<=0) || (size.y<=0) || (size.z<=0) )
	{
		throw Exception("An attempt was made to create a Texture with an invalid size");
	}

	GraphicContextProvider *gc_provider = context.get_provider();

	impl->provider = gc_provider->alloc_texture(texture_3d);
	impl->provider->create(size.x, size.y, size.z, 1, texture_format, levels);
	impl->width = size.x;
	impl->height = size.y;
	impl->depth = size.z;

	impl->provider->set_wrap_mode(impl->wrap_mode_s, impl->wrap_mode_t, impl->wrap_mode_r);
}
	void D3DVertexArrayBufferProvider::upload_data(GraphicContext &gc, int offset, const void *data, int data_size)
	{
		if ((offset < 0) || (data_size < 0) || ((data_size + offset) > size))
			throw Exception("Vertex array buffer, invalid size");

		const ComPtr<ID3D11Device> &device = static_cast<D3DGraphicContextProvider*>(gc.get_provider())->get_window()->get_device();
		ComPtr<ID3D11DeviceContext> device_context;
		device->GetImmediateContext(device_context.output_variable());

		D3D11_BOX box;
		box.left = offset;
		box.right = offset + data_size;
		box.top = 0;
		box.bottom = 1;
		box.front = 0;
		box.back = 1;

		device_context->UpdateSubresource(get_handles(device).buffer, 0, &box, data, 0, 0);
	}
void D3DStorageBufferProvider::copy_to(GraphicContext &gc, TransferBuffer &buffer, int dest_pos, int src_pos, int copy_size)
{
	const ComPtr<ID3D11Device> &device = static_cast<D3DGraphicContextProvider*>(gc.get_provider())->get_window()->get_device();
	ComPtr<ID3D11Buffer> &transfer_buffer = static_cast<D3DTransferBufferProvider*>(buffer.get_provider())->get_buffer(device);
	int transfer_buffer_size = static_cast<D3DTransferBufferProvider*>(buffer.get_provider())->get_size();

	if (copy_size == -1)
		copy_size = transfer_buffer_size;

	if (dest_pos < 0 || copy_size < 0 || dest_pos + copy_size > transfer_buffer_size || src_pos < 0 || src_pos + copy_size > size)
		throw Exception("Out of bounds!");

	ComPtr<ID3D11DeviceContext> device_context;
	device->GetImmediateContext(device_context.output_variable());

	D3D11_BOX box;
	box.left = dest_pos;
	box.right = dest_pos + copy_size;
	box.top = 0;
	box.bottom = 1;
	box.front = 0;
	box.back = 1;
	device_context->CopySubresourceRegion(transfer_buffer, 0, src_pos, 0, 0, get_handles(device).buffer, 0, &box);
}
Ejemplo n.º 20
0
	void Texture2D::copy_image_from(GraphicContext &context, const Rect &pos, int level, TextureFormat texture_format)
	{
		impl->provider->copy_image_from(pos.left, pos.top, pos.get_width(), pos.get_height(), level, texture_format, context.get_provider());
	}
Ejemplo n.º 21
0
FrameBuffer::FrameBuffer(GraphicContext &context)
: impl(std::make_shared<FrameBuffer_Impl>())
{
	GraphicContextProvider *gc_provider = context.get_provider();
	impl->provider = gc_provider->alloc_frame_buffer();
}
Ejemplo n.º 22
0
DepthStencilState::DepthStencilState(GraphicContext &context, const DepthStencilStateDescription &desc)
: provider(context.get_provider()->create_depth_stencil_state(desc))
{
}
Ejemplo n.º 23
0
	void Texture2D::copy_image_from(GraphicContext &context, int x, int y, int width, int height, int level, TextureFormat texture_format)
	{
		impl->provider->copy_image_from(x, y, width, height, level, texture_format, context.get_provider());
	}
Ejemplo n.º 24
0
	BlendState::BlendState(GraphicContext &context, const BlendStateDescription &desc)
		: provider(context.get_provider()->create_blend_state(desc))
	{
	}
Ejemplo n.º 25
0
	void Texture2D::copy_subimage_from(GraphicContext &context, const Point &offset, const Rect &pos, int level)
	{
		impl->provider->copy_subimage_from(offset.x, offset.y, pos.left, pos.top, pos.get_width(), pos.get_height(), level, context.get_provider());
	}
Ejemplo n.º 26
0
	void Texture2D::copy_subimage_from(GraphicContext &context, int offset_x, int offset_y, int x, int y, int width, int height, int level)
	{
		impl->provider->copy_subimage_from(offset_x, offset_y, x, y, width, height, level, context.get_provider());
	}