Мой рендеринг d3d11 не сразу обновляет ту часть окна, которая была за кадромC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Гость
 Мой рендеринг d3d11 не сразу обновляет ту часть окна, которая была за кадром

Сообщение Гость »


когда я рендерю треугольник
Изображение
я двигаюсь это за пределами экрана
Изображение
часть, которая была за пределами экрана экран не обновляется немедленно
Изображение
Я не знаю, как добавить это поведение, я не знаю, известна ли это вещь, и я не знаю, как ее решить, я не знал как искать об этом, чтобы я ничего не нашел.
Я просто хочу знать, как это решить, но не знаю как.
< p>мой код:

Код: Выделить всё


#include 
#define WIN32_LEAN_AND_MEAN
#define NOMINMAX
#include 
#include 
#include 
#include 

#include "indoin.hpp"

#pragma comment(lib, "d3dcompiler")
#pragma comment(lib, "d3d11")
#pragma comment(lib, "dxgi")

#define check(x) Check(x, std::to_string(__LINE__), __FILE__)

#define VSFile L"shader.sh"
#define FSFile L"shader.sh"

#include 
struct position {
float x, y;
};
struct color {
float r, g, b;
};

struct vertex {

position pos;
color col;

};

const vertex vertices[] = {

{-1.0f,  1.0f,  0.0f, 1.0f, 0.0f},
{ 1.0f, -1.0f,  0.0f, 0.0f, 1.0f},
{-1.0f, -1.0f,  1.0f, 0.0f, 0.0f},

};

int other(HINSTANCE hInstance);

int main()
{

window wnd(800, 500, L"window name", Y_sizable_Y_windowed);

Microsoft::WRL::ComPtr factory = nullptr;
Microsoft::WRL::ComPtr device = nullptr;
Microsoft::WRL::ComPtr context = nullptr; {

check(CreateDXGIFactory1(IID_PPV_ARGS(&factory)));
Microsoft::WRL::ComPtr adapter = nullptr;
factory->EnumAdapters(0, adapter.GetAddressOf());
check(D3D11CreateDevice(adapter.Get(), D3D_DRIVER_TYPE_UNKNOWN, 0, D3D11_CREATE_DEVICE_DEBUG, 0, 0, D3D11_SDK_VERSION, device.GetAddressOf(), 0, context.GetAddressOf()));
DXGI_ADAPTER_DESC desc; HRESULT res = adapter->GetDesc(&desc);
if(!FAILED(res))std::wcout GetBufferPointer(), ps->GetBufferSize(), NULL, pixel_shader.GetAddressOf()));
}

Microsoft::WRL::ComPtr swapchain = nullptr;{

DXGI_SWAP_CHAIN_DESC desc = {};  {

desc.Windowed = 1;
desc.SwapEffect = DXGI_SWAP_EFFECT_SEQUENTIAL;
desc.OutputWindow = wnd.wnd;
desc.SampleDesc.Count = 1;
desc.BufferCount = 2;
desc.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
desc.BufferDesc.RefreshRate = {120, 1};
desc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;

}

check(factory->CreateSwapChain(device.Get(), &desc, swapchain.GetAddressOf()));

}
Microsoft::WRL::ComPtr  RTV = nullptr; {

D3D11_RENDER_TARGET_VIEW_DESC desc = {}; {

desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
desc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D;
desc.Texture2D.MipSlice = 0;
}
Microsoft::WRL::ComPtr back_buffer = nullptr;
check(swapchain->GetBuffer(0, IID_PPV_ARGS(back_buffer.GetAddressOf())));
check(device->CreateRenderTargetView(back_buffer.Get(), &desc, &RTV));

}
Microsoft::WRL::ComPtr layout = nullptr; {

const D3D11_INPUT_ELEMENT_DESC desc[] = {

{"POSITION", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0},
{"COLOR", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, sizeof(position) , D3D11_INPUT_PER_VERTEX_DATA, 0}
};
check(device->CreateInputLayout(desc, ARRAYSIZE(desc), vs->GetBufferPointer(), vs->GetBufferSize(), layout.GetAddressOf()));
}
{ UINT32 stride = sizeof(vertex); UINT offset = 0;
context->IASetVertexBuffers(0, 1, vertex_buffer.GetAddressOf(), &stride, &offset);
context->IASetInputLayout(layout.Get());
context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);

context->VSSetShader(vertex_shader.Get(), NULL, 0);
context->PSSetShader(pixel_shader.Get(), NULL, 0);

context->OMSetRenderTargets(1, RTV.GetAddressOf(), nullptr);
}

ShowWindow(wnd.wnd, SW_SHOW);

while (wnd.msg.message != WM_QUIT) {

handle_msg(wnd);

RECT winRect;
GetClientRect(wnd.wnd, &winRect);
D3D11_VIEWPORT port[] = {
{.TopLeftX = 0, .TopLeftY = 0,
.Width = (FLOAT)(winRect.right - winRect.left),
.Height = (FLOAT)(winRect.bottom - winRect.top),
.MinDepth = 0, .MaxDepth = 1 }
}; context->RSSetViewports(1, port);

float clearColor[4] = { 0.0f, 0.0f, 0.0f, 1.0f };

context->ClearRenderTargetView(RTV.Get(), clearColor);
context->Draw(3, 0);
swapchain->Present(1, 0);

}
return 0;
}



Источник: https://stackoverflow.com/questions/781 ... -was-off-s
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Мой рендеринг d3d11 не сразу обновляет ту часть окна, которая была за кадром
    Гость » » в форуме C++
    0 Ответы
    23 Просмотры
    Последнее сообщение Гость
  • Мой рендеринг d3d11 не сразу обновляет ту часть окна, которая была за кадром
    Гость » » в форуме C++
    0 Ответы
    27 Просмотры
    Последнее сообщение Гость
  • Android Canvas не рендеринг на текстурной поверхности, связанной с кадром
    Anonymous » » в форуме Android
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Android Canvas не рендеринг на текстурной поверхности, связанной с кадром
    Anonymous » » в форуме Android
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • OpenGL за кадром MSAA не рендеринг
    Anonymous » » в форуме C++
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»