brought back functionality from previous builds but now cross-platform
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
#include "SDL3/SDL_gamepad.h"
|
||||
#include "SDL3/SDL_joystick.h"
|
||||
#include "rendering.h"
|
||||
#include "tier0/platform.h"
|
||||
#include "tier1/utlvector.h"
|
||||
@@ -101,7 +103,7 @@ void IVideo_SwapchainInit()
|
||||
swapchainCreateInfo.imageFormat = selectedFormat.format;
|
||||
swapchainCreateInfo.imageColorSpace = selectedFormat.colorSpace;
|
||||
swapchainCreateInfo.presentMode = VK_PRESENT_MODE_IMMEDIATE_KHR;
|
||||
swapchainCreateInfo.imageUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_STORAGE_BIT;
|
||||
swapchainCreateInfo.imageUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT;
|
||||
swapchainCreateInfo.preTransform = surfaceCapatibilities.currentTransform;
|
||||
swapchainCreateInfo.compositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR;
|
||||
swapchainCreateInfo.imageArrayLayers = 1;
|
||||
@@ -232,9 +234,16 @@ EInputKey ISDL_KeyName(SDL_Keycode key)
|
||||
|
||||
void IVideo::Init()
|
||||
{
|
||||
SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTS);
|
||||
SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTS | SDL_INIT_GAMEPAD);
|
||||
g_window = SDL_CreateWindow("rtt", 1280, 720, SDL_WINDOW_VULKAN);
|
||||
|
||||
|
||||
int nNumGamepads = 0;
|
||||
SDL_JoystickID *pGamepads = SDL_GetGamepads(&nNumGamepads);
|
||||
for ( uint32_t i = 0; i < nNumGamepads; i++ )
|
||||
{
|
||||
SDL_OpenGamepad(pGamepads[i]);
|
||||
}
|
||||
|
||||
unsigned int nExtensionCount = 0;
|
||||
const char* const* szExtensions = SDL_Vulkan_GetInstanceExtensions(&nExtensionCount);
|
||||
|
||||
@@ -306,23 +315,20 @@ void IVideo::Init()
|
||||
queueCreateInfo.queueCount = 1;
|
||||
queueCreateInfo.pQueuePriorities = &queuePriority;
|
||||
|
||||
VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT pdvidsfe = {
|
||||
.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT,
|
||||
.vertexInputDynamicState = VK_TRUE,
|
||||
VkPhysicalDeviceShaderObjectFeaturesEXT pdsofe = {
|
||||
.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OBJECT_FEATURES_EXT,
|
||||
.pNext = 0,
|
||||
.shaderObject = VK_TRUE,
|
||||
};
|
||||
|
||||
VkPhysicalDeviceExtendedDynamicState3FeaturesEXT pdeds3fe = {
|
||||
.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_FEATURES_EXT,
|
||||
.pNext = &pdvidsfe,
|
||||
.pNext = &pdsofe,
|
||||
.extendedDynamicState3DepthClampEnable = VK_TRUE,
|
||||
.extendedDynamicState3PolygonMode = VK_TRUE,
|
||||
.extendedDynamicState3RasterizationSamples = VK_TRUE,
|
||||
.extendedDynamicState3SampleMask = VK_TRUE,
|
||||
.extendedDynamicState3AlphaToCoverageEnable = VK_TRUE,
|
||||
.extendedDynamicState3LogicOpEnable = VK_TRUE,
|
||||
.extendedDynamicState3ColorBlendEnable = VK_TRUE,
|
||||
.extendedDynamicState3ColorBlendEquation = VK_TRUE,
|
||||
.extendedDynamicState3ColorWriteMask = VK_TRUE,
|
||||
};
|
||||
|
||||
VkPhysicalDeviceVulkan13Features pdv13f = {
|
||||
@@ -344,7 +350,6 @@ void IVideo::Init()
|
||||
|
||||
const char *szEnabledGPUExtensions[] = {
|
||||
VK_KHR_SWAPCHAIN_EXTENSION_NAME,
|
||||
VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_EXTENSION_NAME,
|
||||
VK_EXT_EXTENDED_DYNAMIC_STATE_3_EXTENSION_NAME,
|
||||
};
|
||||
VkDeviceCreateInfo deviceCreateInfo = {};
|
||||
@@ -395,6 +400,8 @@ void IInput::SetMouseMode( EMouseMode mode )
|
||||
}
|
||||
}
|
||||
|
||||
ConVar m_pitch("m_pitch", "0.022", FCVAR_ARCHIVE);
|
||||
ConVar m_yaw("m_yaw", "0.022", FCVAR_ARCHIVE);
|
||||
void IVideo_HandleEvents()
|
||||
{
|
||||
SDL_Event event;
|
||||
@@ -419,8 +426,30 @@ void IVideo_HandleEvents()
|
||||
IInput::KeyEvent(ISDL_KeyName(key->key),KEY_EVENT_TYPE_UP);
|
||||
break;
|
||||
case SDL_EVENT_MOUSE_MOTION:
|
||||
IInput::AxisEvent(AXIS_MOUSE_X, motion->yrel*0.022);
|
||||
IInput::AxisEvent(AXIS_MOUSE_Y, -motion->xrel*0.022);
|
||||
IInput::AxisEvent(AXIS_MOUSE_X, motion->yrel*m_pitch.GetFloat());
|
||||
IInput::AxisEvent(AXIS_MOUSE_Y, -motion->xrel*m_yaw.GetFloat());
|
||||
break;
|
||||
case SDL_EVENT_GAMEPAD_AXIS_MOTION:
|
||||
{
|
||||
SDL_GamepadAxis axis = (SDL_GamepadAxis)event.gaxis.axis;
|
||||
float value = event.gaxis.value / 32768.0f;
|
||||
if (abs(event.gaxis.value)<1000)
|
||||
value = 0;
|
||||
SDL_JoystickID id = event.gaxis.which;
|
||||
|
||||
if (axis == SDL_GAMEPAD_AXIS_RIGHTY)
|
||||
{
|
||||
IInput::AxisEvent(AXIS_CONTROLLER_PITCH, value);
|
||||
}
|
||||
if (axis == SDL_GAMEPAD_AXIS_RIGHTX)
|
||||
{
|
||||
IInput::AxisEvent(AXIS_CONTROLLER_YAW, -value);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case SDL_EVENT_GAMEPAD_BUTTON_DOWN:
|
||||
break;
|
||||
case SDL_EVENT_GAMEPAD_BUTTON_UP:
|
||||
break;
|
||||
}
|
||||
};
|
||||
@@ -464,16 +493,6 @@ void IVideo::Frame( float fDelta )
|
||||
beginInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
|
||||
vkBeginCommandBuffer(g_vkCommandBuffer, &beginInfo);
|
||||
IVulkan::Frame();
|
||||
VkClearColorValue clear = {
|
||||
.float32 = {
|
||||
1,1,0,1
|
||||
}
|
||||
};
|
||||
VkImageSubresourceRange range = {
|
||||
.levelCount = 1,
|
||||
.layerCount = 1,
|
||||
};
|
||||
vkCmdClearColorImage(g_vkCommandBuffer, g_swapchainImage, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, &clear, 1, &range);
|
||||
vkEndCommandBuffer(g_vkCommandBuffer);
|
||||
|
||||
VkPipelineStageFlags waitStages[] = {VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT};
|
||||
|
||||
Reference in New Issue
Block a user