mirror of
https://github.com/borgesdan/xn65
synced 2024-12-29 21:54:47 +01:00
Implementa Texture2D::FromStream
This commit is contained in:
parent
321d8f2a3a
commit
a57491f161
@ -1,101 +1,105 @@
|
|||||||
{
|
{
|
||||||
"version": 3,
|
"version": 3,
|
||||||
"configurePresets": [
|
"configurePresets": [
|
||||||
{
|
{
|
||||||
"name": "windows-base",
|
"name": "windows-base",
|
||||||
"hidden": true,
|
"hidden": true,
|
||||||
"generator": "Ninja",
|
"generator": "Ninja",
|
||||||
"binaryDir": "${sourceDir}/out/build/${presetName}",
|
"binaryDir": "${sourceDir}/out/build/${presetName}",
|
||||||
"installDir": "${sourceDir}/out/install/${presetName}",
|
"installDir": "${sourceDir}/out/install/${presetName}",
|
||||||
"cacheVariables": {
|
"cacheVariables": {
|
||||||
"CMAKE_C_COMPILER": "cl.exe",
|
"CMAKE_C_COMPILER": "cl.exe",
|
||||||
"CMAKE_CXX_COMPILER": "cl.exe"
|
"CMAKE_CXX_COMPILER": "cl.exe"
|
||||||
},
|
},
|
||||||
"condition": {
|
"condition": {
|
||||||
"type": "equals",
|
"type": "equals",
|
||||||
"lhs": "${hostSystemName}",
|
"lhs": "${hostSystemName}",
|
||||||
"rhs": "Windows"
|
"rhs": "Windows"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "x64-debug",
|
"name": "x64-debug",
|
||||||
"displayName": "x64 Debug",
|
"displayName": "x64 Debug",
|
||||||
"inherits": "windows-base",
|
"inherits": "windows-base",
|
||||||
"architecture": {
|
"architecture": {
|
||||||
"value": "x64",
|
"value": "x64",
|
||||||
"strategy": "external"
|
"strategy": "external"
|
||||||
},
|
},
|
||||||
"cacheVariables": {
|
"cacheVariables": {
|
||||||
"CMAKE_BUILD_TYPE": "Debug"
|
"CMAKE_BUILD_TYPE": "Debug",
|
||||||
}
|
"CMAKE_TOOLCHAIN_FILE": "C:\\vcpkg\\scripts\\buildsystems\\vcpkg.cmake"
|
||||||
},
|
}
|
||||||
{
|
},
|
||||||
"name": "x64-release",
|
{
|
||||||
"displayName": "x64 Release",
|
"name": "x64-release",
|
||||||
"inherits": "x64-debug",
|
"displayName": "x64 Release",
|
||||||
"cacheVariables": {
|
"inherits": "x64-debug",
|
||||||
"CMAKE_BUILD_TYPE": "Release"
|
"cacheVariables": {
|
||||||
}
|
"CMAKE_BUILD_TYPE": "Release",
|
||||||
},
|
"CMAKE_TOOLCHAIN_FILE": "C:\\vcpkg\\scripts\\buildsystems\\vcpkg.cmake"
|
||||||
{
|
}
|
||||||
"name": "x86-debug",
|
},
|
||||||
"displayName": "x86 Debug",
|
{
|
||||||
"inherits": "windows-base",
|
"name": "x86-debug",
|
||||||
"architecture": {
|
"displayName": "x86 Debug",
|
||||||
"value": "x86",
|
"inherits": "windows-base",
|
||||||
"strategy": "external"
|
"architecture": {
|
||||||
},
|
"value": "x86",
|
||||||
"cacheVariables": {
|
"strategy": "external"
|
||||||
"CMAKE_BUILD_TYPE": "Debug"
|
},
|
||||||
}
|
"cacheVariables": {
|
||||||
},
|
"CMAKE_BUILD_TYPE": "Debug",
|
||||||
{
|
"CMAKE_TOOLCHAIN_FILE": "C:\\vcpkg\\scripts\\buildsystems\\vcpkg.cmake"
|
||||||
"name": "x86-release",
|
}
|
||||||
"displayName": "x86 Release",
|
},
|
||||||
"inherits": "x86-debug",
|
{
|
||||||
"cacheVariables": {
|
"name": "x86-release",
|
||||||
"CMAKE_BUILD_TYPE": "Release"
|
"displayName": "x86 Release",
|
||||||
}
|
"inherits": "x86-debug",
|
||||||
},
|
"cacheVariables": {
|
||||||
{
|
"CMAKE_BUILD_TYPE": "Release",
|
||||||
"name": "linux-debug",
|
"CMAKE_TOOLCHAIN_FILE": "C:\\vcpkg\\scripts\\buildsystems\\vcpkg.cmake"
|
||||||
"displayName": "Linux Debug",
|
}
|
||||||
"generator": "Ninja",
|
},
|
||||||
"binaryDir": "${sourceDir}/out/build/${presetName}",
|
{
|
||||||
"installDir": "${sourceDir}/out/install/${presetName}",
|
"name": "linux-debug",
|
||||||
"cacheVariables": {
|
"displayName": "Linux Debug",
|
||||||
"CMAKE_BUILD_TYPE": "Debug"
|
"generator": "Ninja",
|
||||||
},
|
"binaryDir": "${sourceDir}/out/build/${presetName}",
|
||||||
"condition": {
|
"installDir": "${sourceDir}/out/install/${presetName}",
|
||||||
"type": "equals",
|
"cacheVariables": {
|
||||||
"lhs": "${hostSystemName}",
|
"CMAKE_BUILD_TYPE": "Debug"
|
||||||
"rhs": "Linux"
|
},
|
||||||
},
|
"condition": {
|
||||||
"vendor": {
|
"type": "equals",
|
||||||
"microsoft.com/VisualStudioRemoteSettings/CMake/1.0": {
|
"lhs": "${hostSystemName}",
|
||||||
"sourceDir": "$env{HOME}/.vs/$ms{projectDirName}"
|
"rhs": "Linux"
|
||||||
}
|
},
|
||||||
}
|
"vendor": {
|
||||||
},
|
"microsoft.com/VisualStudioRemoteSettings/CMake/1.0": {
|
||||||
{
|
"sourceDir": "$env{HOME}/.vs/$ms{projectDirName}"
|
||||||
"name": "macos-debug",
|
|
||||||
"displayName": "macOS Debug",
|
|
||||||
"generator": "Ninja",
|
|
||||||
"binaryDir": "${sourceDir}/out/build/${presetName}",
|
|
||||||
"installDir": "${sourceDir}/out/install/${presetName}",
|
|
||||||
"cacheVariables": {
|
|
||||||
"CMAKE_BUILD_TYPE": "Debug"
|
|
||||||
},
|
|
||||||
"condition": {
|
|
||||||
"type": "equals",
|
|
||||||
"lhs": "${hostSystemName}",
|
|
||||||
"rhs": "Darwin"
|
|
||||||
},
|
|
||||||
"vendor": {
|
|
||||||
"microsoft.com/VisualStudioRemoteSettings/CMake/1.0": {
|
|
||||||
"sourceDir": "$env{HOME}/.vs/$ms{projectDirName}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
]
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "macos-debug",
|
||||||
|
"displayName": "macOS Debug",
|
||||||
|
"generator": "Ninja",
|
||||||
|
"binaryDir": "${sourceDir}/out/build/${presetName}",
|
||||||
|
"installDir": "${sourceDir}/out/install/${presetName}",
|
||||||
|
"cacheVariables": {
|
||||||
|
"CMAKE_BUILD_TYPE": "Debug"
|
||||||
|
},
|
||||||
|
"condition": {
|
||||||
|
"type": "equals",
|
||||||
|
"lhs": "${hostSystemName}",
|
||||||
|
"rhs": "Darwin"
|
||||||
|
},
|
||||||
|
"vendor": {
|
||||||
|
"microsoft.com/VisualStudioRemoteSettings/CMake/1.0": {
|
||||||
|
"sourceDir": "$env{HOME}/.vs/$ms{projectDirName}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
@ -10,4 +10,23 @@ if (CMAKE_VERSION VERSION_GREATER 3.12)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
# TODO: Add tests and install targets if needed.
|
# TODO: Add tests and install targets if needed.
|
||||||
target_link_libraries(${PROJECT_NAME} D3d11.lib dxgi.lib)
|
|
||||||
|
# -- Biblioteca DirectxTK --
|
||||||
|
# Url: https://github.com/microsoft/DirectXTK/wiki/DirectXTK
|
||||||
|
#
|
||||||
|
# -- Instalação via vcpkg --
|
||||||
|
# Para efetuar o download do vcpkg verifique o caminho abaixo
|
||||||
|
# Url: https://learn.microsoft.com/pt-br/vcpkg/get_started/get-started?pivots=shell-cmd
|
||||||
|
#
|
||||||
|
# Siga os procedimentos da página oficial do DirectxTK para instalação via vcpkg
|
||||||
|
#
|
||||||
|
# [!] Atualize o arquivo CMakePresets.json, nos 'presets' necessários,
|
||||||
|
# para que find_package execute corretamente
|
||||||
|
#
|
||||||
|
# "cacheVariables": {
|
||||||
|
# "CMAKE_TOOLCHAIN_FILE": "{VCPKG_DIR}\\scripts\\buildsystems\\vcpkg.cmake"
|
||||||
|
# }
|
||||||
|
|
||||||
|
find_package(directxtk CONFIG REQUIRED)
|
||||||
|
|
||||||
|
target_link_libraries(${PROJECT_NAME} D3d11.lib dxgi.lib Microsoft::DirectXTK)
|
||||||
|
@ -99,6 +99,8 @@ namespace xna {
|
|||||||
using PTexture = std::shared_ptr<Texture>;
|
using PTexture = std::shared_ptr<Texture>;
|
||||||
class Texture2D;
|
class Texture2D;
|
||||||
using PTexture2D = std::shared_ptr<Texture2D>;
|
using PTexture2D = std::shared_ptr<Texture2D>;
|
||||||
|
class VertexInputLayout;
|
||||||
|
using PVertexInputLayout = std::shared_ptr<VertexInputLayout>;
|
||||||
struct Viewport;
|
struct Viewport;
|
||||||
using PViewport = std::shared_ptr<Viewport>;
|
using PViewport = std::shared_ptr<Viewport>;
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,7 @@ namespace xna {
|
|||||||
public:
|
public:
|
||||||
virtual ~IRenderTarget2D(){}
|
virtual ~IRenderTarget2D(){}
|
||||||
|
|
||||||
virtual bool Apply() = 0;
|
virtual bool Bind() = 0;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,9 +9,11 @@ namespace xna {
|
|||||||
class Texture {
|
class Texture {
|
||||||
};
|
};
|
||||||
|
|
||||||
class ITexture2D {
|
class ITexture2D : public Texture {
|
||||||
public:
|
public:
|
||||||
virtual ~ITexture2D(){}
|
virtual ~ITexture2D(){}
|
||||||
|
virtual Int Width() const = 0;
|
||||||
|
virtual Int Height() const = 0;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,7 +69,7 @@ namespace xna {
|
|||||||
_renderTarget2D = New<RenderTarget2D>(this);
|
_renderTarget2D = New<RenderTarget2D>(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_renderTarget2D->Apply())
|
if (!_renderTarget2D->Bind())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
D3D11_VIEWPORT view{};
|
D3D11_VIEWPORT view{};
|
||||||
|
@ -16,7 +16,7 @@ namespace xna {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int Game::Run() {
|
int Game::Run() {
|
||||||
if (GraphicsDevice == nullptr) {
|
if (_graphicsDevice == nullptr) {
|
||||||
MessageBox(nullptr, "O dispositivo gráfico não foi inicializar corretamente", "Xna Game Engine", MB_OK);
|
MessageBox(nullptr, "O dispositivo gráfico não foi inicializar corretamente", "Xna Game Engine", MB_OK);
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
@ -50,7 +50,7 @@ namespace xna {
|
|||||||
|
|
||||||
this->Draw(gameTime);
|
this->Draw(gameTime);
|
||||||
|
|
||||||
GraphicsDevice->Present();
|
_graphicsDevice->Present();
|
||||||
|
|
||||||
endElapsedTime = _clock.ElapsedTime();
|
endElapsedTime = _clock.ElapsedTime();
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,7 @@ namespace xna {
|
|||||||
}
|
}
|
||||||
|
|
||||||
virtual PGraphicsDevice GetGraphicsDevice() override {
|
virtual PGraphicsDevice GetGraphicsDevice() override {
|
||||||
return GraphicsDevice;
|
return _graphicsDevice;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@ -31,7 +31,7 @@ namespace xna {
|
|||||||
virtual void Update(GameTime const& gameTime) override{}
|
virtual void Update(GameTime const& gameTime) override{}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
PGraphicsDevice GraphicsDevice{ nullptr };
|
PGraphicsDevice _graphicsDevice{ nullptr };
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
PGameWindow _gameWindow{ nullptr };
|
PGameWindow _gameWindow{ nullptr };
|
||||||
|
@ -44,7 +44,7 @@ namespace xna {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_game->GraphicsDevice = _device;
|
_game->_graphicsDevice = _device;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GraphicsDeviceManager::ChangeDevice() {
|
void GraphicsDeviceManager::ChangeDevice() {
|
||||||
|
@ -8,7 +8,7 @@ namespace xna {
|
|||||||
_device = device;
|
_device = device;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RenderTarget2D::Apply() {
|
bool RenderTarget2D::Bind() {
|
||||||
if (_texture2D) {
|
if (_texture2D) {
|
||||||
_texture2D->Release();
|
_texture2D->Release();
|
||||||
_texture2D = nullptr;
|
_texture2D = nullptr;
|
||||||
@ -18,7 +18,7 @@ namespace xna {
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
auto& device = _device->_device;
|
auto& device = _device->_device;
|
||||||
|
|
||||||
if FAILED(device->CreateRenderTargetView(_texture2D, NULL, &_renderTargetView))
|
if FAILED(device->CreateRenderTargetView(_texture2D, NULL, &_renderTargetView))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -18,10 +18,11 @@ namespace xna {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual bool Apply() override;
|
virtual bool Bind() override;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ID3D11RenderTargetView* _renderTargetView = nullptr;
|
ID3D11RenderTargetView* _renderTargetView = nullptr;
|
||||||
|
D3D11_RENDER_TARGET_VIEW_DESC _renderTargetDesc{};
|
||||||
GraphicsDevice* _device{ nullptr };
|
GraphicsDevice* _device{ nullptr };
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,54 @@
|
|||||||
#include "texture-dx.hpp"
|
#include "texture-dx.hpp"
|
||||||
|
#include "WICTextureLoader.h"
|
||||||
|
#include "device-dx.hpp"
|
||||||
|
#include "../helpers.hpp"
|
||||||
|
|
||||||
namespace xna {
|
namespace xna {
|
||||||
Texture2D::Texture2D() {
|
Texture2D::Texture2D() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PTexture2D Texture2D::FromStream(GraphicsDevice& device, String const& fileName, xna_error_ptr_arg)
|
||||||
|
{
|
||||||
|
ID3D11Resource* resource = nullptr;
|
||||||
|
//D3D11ShaderResourceView* view = nullptr;
|
||||||
|
auto wstr = StringToWString(fileName);
|
||||||
|
|
||||||
|
HRESULT result = DirectX::CreateWICTextureFromFile(
|
||||||
|
device._device, device._context, wstr.c_str(),
|
||||||
|
&resource, nullptr, 0U);
|
||||||
|
|
||||||
|
if (FAILED(result))
|
||||||
|
{
|
||||||
|
xna_error_apply(err, XnaErrorCode::STREAM_ERROR);
|
||||||
|
|
||||||
|
if (resource) {
|
||||||
|
resource->Release();
|
||||||
|
resource = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
ID3D11Texture2D* txt2d = nullptr;
|
||||||
|
result = resource->QueryInterface(IID_ID3D11Texture2D, (void**)&txt2d);
|
||||||
|
|
||||||
|
if (FAILED(result)) {
|
||||||
|
xna_error_apply(err, XnaErrorCode::BAD_CAST);
|
||||||
|
|
||||||
|
if (resource) {
|
||||||
|
resource->Release();
|
||||||
|
resource = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto texture2d = New<Texture2D>();
|
||||||
|
texture2d->_texture2D = txt2d;
|
||||||
|
|
||||||
|
resource->Release();
|
||||||
|
resource = nullptr;
|
||||||
|
|
||||||
|
return texture2d;
|
||||||
|
}
|
||||||
}
|
}
|
@ -4,6 +4,7 @@
|
|||||||
#include "../graphics/texture.hpp"
|
#include "../graphics/texture.hpp"
|
||||||
#include "dxgi.h"
|
#include "dxgi.h"
|
||||||
#include "d3d11.h"
|
#include "d3d11.h"
|
||||||
|
#include "../xnaerror.hpp"
|
||||||
|
|
||||||
namespace xna {
|
namespace xna {
|
||||||
class Texture2D : public ITexture2D {
|
class Texture2D : public ITexture2D {
|
||||||
@ -17,8 +18,22 @@ namespace xna {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual constexpr Int Width() const override {
|
||||||
|
return _width;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual constexpr Int Height() const override {
|
||||||
|
return _height;
|
||||||
|
}
|
||||||
|
|
||||||
|
static PTexture2D FromStream(GraphicsDevice& device, String const& fileName, xna_error_nullarg);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ID3D11Texture2D* _texture2D{nullptr};
|
ID3D11Texture2D* _texture2D{nullptr};
|
||||||
|
|
||||||
|
private:
|
||||||
|
Uint _width{ 0 };
|
||||||
|
Uint _height{ 0 };
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,15 +16,19 @@ class Game1 : public Game {
|
|||||||
public:
|
public:
|
||||||
Game1() {
|
Game1() {
|
||||||
graphics = New<GraphicsDeviceManager>(this);
|
graphics = New<GraphicsDeviceManager>(this);
|
||||||
}
|
|
||||||
|
|
||||||
virtual void Update(GameTime const& gameTime) {
|
XnaErrorCode err;
|
||||||
|
Texture2D::FromStream(*_graphicsDevice, "D:\\sprite.jpg", &err);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void Update(GameTime const& gameTime) override {
|
||||||
|
|
||||||
Game::Update(gameTime);
|
Game::Update(gameTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void Draw(GameTime const& gameTime) {
|
virtual void Draw(GameTime const& gameTime) override {
|
||||||
GraphicsDevice->Clear();
|
_graphicsDevice->Clear();
|
||||||
|
|
||||||
Game::Draw(gameTime);
|
Game::Draw(gameTime);
|
||||||
}
|
}
|
||||||
|
@ -12,5 +12,6 @@
|
|||||||
#include "platform/game-dx.hpp"
|
#include "platform/game-dx.hpp"
|
||||||
#include "csharp/stream.hpp"
|
#include "csharp/stream.hpp"
|
||||||
#include "platform/gdevicemanager-dx.hpp"
|
#include "platform/gdevicemanager-dx.hpp"
|
||||||
|
#include "platform/texture-dx.hpp"
|
||||||
|
|
||||||
// TODO: Reference additional headers your program requires here.
|
// TODO: Reference additional headers your program requires here.
|
||||||
|
@ -8,7 +8,9 @@ namespace xna {
|
|||||||
ARGUMENT_IS_NULL,
|
ARGUMENT_IS_NULL,
|
||||||
INVALID_OPERATION,
|
INVALID_OPERATION,
|
||||||
OVERFLOW_OPERATION,
|
OVERFLOW_OPERATION,
|
||||||
NULL_CAST,
|
NULL_CAST,
|
||||||
|
BAD_CAST,
|
||||||
|
STREAM_ERROR
|
||||||
};
|
};
|
||||||
|
|
||||||
inline void xna_error_apply(XnaErrorCode* source, XnaErrorCode const& value) {
|
inline void xna_error_apply(XnaErrorCode* source, XnaErrorCode const& value) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user