gs_device::gs_device(gs_init_data *data) : curRenderTarget (NULL), curZStencilBuffer (NULL), curRenderSide (0), curIndexBuffer (NULL), curVertexBuffer (NULL), curVertexShader (NULL), curPixelShader (NULL), curSwapChain (&defaultSwap), zstencilStateChanged (true), rasterStateChanged (true), blendStateChanged (true), curDepthStencilState (NULL), curRasterState (NULL), curBlendState (NULL), curToplogy (D3D11_PRIMITIVE_TOPOLOGY_UNDEFINED) { ComPtr<IDXGIAdapter1> adapter; matrix4_identity(&curProjMatrix); matrix4_identity(&curViewMatrix); matrix4_identity(&curViewProjMatrix); memset(&viewport, 0, sizeof(viewport)); for (size_t i = 0; i < GS_MAX_TEXTURES; i++) { curTextures[i] = NULL; curSamplers[i] = NULL; } InitFactory(data->adapter, adapter.Assign()); InitDevice(data, adapter); device_set_render_target(this, NULL, NULL); }
void device_load_swapchain(gs_device_t device, gs_swapchain_t swapchain) { gs_texture_t target = device->curRenderTarget; gs_zstencil_t zs = device->curZStencilBuffer; bool is_cube = device->curRenderTarget->type == GS_TEXTURE_CUBE; if (target == &device->curSwapChain->target) target = NULL; if (zs == &device->curSwapChain->zs) zs = NULL; if (swapchain == NULL) swapchain = &device->defaultSwap; device->curSwapChain = swapchain; if (is_cube) device_set_cube_render_target(device, target, device->curRenderSide, zs); else device_set_render_target(device, target, zs); }
gs_device::gs_device(const gs_init_data *data) : curSwapChain (&defaultSwap), curToplogy (D3D11_PRIMITIVE_TOPOLOGY_UNDEFINED) { ComPtr<IDXGIAdapter1> adapter; matrix4_identity(&curProjMatrix); matrix4_identity(&curViewMatrix); matrix4_identity(&curViewProjMatrix); memset(&viewport, 0, sizeof(viewport)); for (size_t i = 0; i < GS_MAX_TEXTURES; i++) { curTextures[i] = NULL; curSamplers[i] = NULL; } InitCompiler(); InitFactory(data->adapter, adapter.Assign()); InitDevice(data, adapter); device_set_render_target(this, NULL, NULL); }