Четверг, 13 Мая 2021, 08:16

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » C/C++ » Изменить / прочитать цвет пикселя. (DirectX 11)
Изменить / прочитать цвет пикселя.
AlexsSyrДата: Пятница, 10 Марта 2017, 18:10 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Есть функция, которая создаёт несколько целей для рисования.
Код
void RenderTarget::InitialMultiRenderTarget(const bool withDepthBuffer,const RenderInitInfo* info)
    {
  HRESULT hr = S_OK;
  bufferCount = info->_mrtCount;

  renderTargetViewArray = new ID3D11RenderTargetView*[bufferCount];
  renderTargetTextureArray = new ID3D11Texture2D*[bufferCount];
  shaderResourceViewArray = new ID3D11ShaderResourceView*[bufferCount];

  textureDesc.Width = info->_width;
  textureDesc.Height = info->_height;
  textureDesc.MipLevels = 1;
  textureDesc.ArraySize = 1;
  textureDesc.Format = DXGI_FORMAT_R32G32B32A32_FLOAT;
  textureDesc.SampleDesc.Count = info->_multisamples;
  textureDesc.SampleDesc.Quality = info->_quality;
  textureDesc.Usage = D3D11_USAGE_DEFAULT;
  textureDesc.BindFlags = D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE;
  textureDesc.CPUAccessFlags = 0;
  textureDesc.MiscFlags = 0;

  for (int i = 0; i<bufferCount; i++)
  {
   hr = render->GetDevice()->CreateTexture2D(&textureDesc, NULL, &renderTargetTextureArray[i]);
   if (FAILED(hr))
   {
    ERROR("Код ошибки: # 0006");
   }
  }

  D3D11_RENDER_TARGET_VIEW_DESC renderTargetViewDesc;

  renderTargetViewDesc.Format = textureDesc.Format;
  renderTargetViewDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D;
  renderTargetViewDesc.Texture2D.MipSlice = 0;

   // Create the render target views.
   for (int i = 0; i<bufferCount; i++)
   {
    hr = render->GetDevice()->CreateRenderTargetView(renderTargetTextureArray[i], &renderTargetViewDesc, &renderTargetViewArray[i]);
    if (FAILED(hr))
    {
     ERROR("Код ошибки: # 0006");
    }
   }

   D3D11_SHADER_RESOURCE_VIEW_DESC shaderResourceViewDesc;
  // Setup the description of the shader resource view.
  shaderResourceViewDesc.Format = textureDesc.Format;
  shaderResourceViewDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D;
  shaderResourceViewDesc.Texture2D.MostDetailedMip = 0;
  shaderResourceViewDesc.Texture2D.MipLevels = 1;

   // Create the shader resource views.
   for (int i = 0; i<bufferCount; i++)
   {
    hr = render->GetDevice()->CreateShaderResourceView(renderTargetTextureArray[i], &shaderResourceViewDesc, &shaderResourceViewArray[i]);
    if (FAILED(hr))
    {
     ERROR("Код ошибки: # 0006");
    }
   }

   ID3D11Texture2D* pBackBuffer = NULL;
   hr = render->GetSwapChain()->GetBuffer(0, __uuidof(ID3D11Texture2D), (LPVOID*)&pBackBuffer);
   if (FAILED(hr))    ERROR("Код ошибки: # 0002");

   D3D11_TEXTURE2D_DESC descDepth;            // —труктура с параметрами
   ZeroMemory(&descDepth, sizeof(descDepth));
   pBackBuffer->GetDesc(&descDepth);
   descDepth.MipLevels = 1;                   // уровень интерпол€ции
   descDepth.ArraySize = 1;
   descDepth.Format = DXGI_FORMAT_D24_UNORM_S8_UINT; // формат (размер пиксел€)
   descDepth.SampleDesc.Count = 1;
   descDepth.SampleDesc.Quality = 0;
   descDepth.Usage = D3D11_USAGE_DEFAULT;
   descDepth.BindFlags = D3D11_BIND_DEPTH_STENCIL;         // вид - буфер глубин
   descDepth.CPUAccessFlags = 0;
   descDepth.MiscFlags = 0;
   pBackBuffer->Release();

   // при помощи заполненной структуры-описани€ создаем объект текстуры
   hr = render->GetDevice()->CreateTexture2D(&descDepth, NULL, &depthStencilBuffer);
   if (FAILED(hr)) ERROR("Код ошибки: # 0004");

   D3D11_DEPTH_STENCIL_VIEW_DESC descDSV;            // —труктура с параметрами
   ZeroMemory(&descDSV, sizeof(descDSV));
   descDSV.Format = descDepth.Format;         // формат как в текстуре
   descDSV.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D;
   descDSV.Texture2D.MipSlice = 0;
   // ѕри помощи заполненной структуры-описани€ и текстуры создаем объект буфера глубин
   hr = render->GetDevice()->CreateDepthStencilView(depthStencilBuffer, &descDSV, &depthStencilView);
   if (FAILED(hr)) ERROR("Код ошибки: # 0005");
    }


Каким образом можно обратиться к любой из них и записать/считать пиксель в координатах XY ?


Сообщение отредактировал AlexsSyr - Пятница, 10 Марта 2017, 18:12
Форум игроделов » Программирование » C/C++ » Изменить / прочитать цвет пикселя. (DirectX 11)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2021 Рейтинг