 |
|

26.08.2021, 21:22
|
|
Постоянный
Регистрация: 24.07.2017
Сообщений: 867
С нами:
4633764
Репутация:
148
|
|
Сообщение от kin4stat
Кстати выше - не самое лучшее решение. Лучше хукать DrawIndexedPrimitive в пайплайне рендера педов( 0x761142) и выставлять цвет пикселей через константы или пиксельный шейдер. Пример:
C:
Код:
sampler2D tex0
:
register
(
s0
)
;
extern
float3 dy
:
register
(
c0
)
;
float4
main
(
float2 tc
:
TEXCOORD0
)
:
COLOR
{
return
tex2D
(
tex0
,
tc
)
*
float4
(
dy
[
0
]
,
dy
[
1
]
,
dy
[
2
]
,
1.0
)
;
}
C++:
Код:
{
HRSRC hsrc
=
FindResourceW
(
reinterpret_cast
(
hmdl
)
,
MAKEINTRESOURCEW
(
IDR_HLSL2
)
,
L
"HLSL"
)
;
PVOID shader
=
LockResource
(
LoadResource
(
reinterpret_cast
(
hmdl
)
,
hsrc
)
)
;
pDevice
->
CreatePixelShader
(
reinterpret_cast
(
shader
)
,
&
pPixelShader
)
;
}
C++:
Код:
pDevice
->
SetPixelShader
(
pPixelShader
)
;
// Rainbow lol
if
(
bTact
)
{
HSVtoRGB
(
RGB
[
0
]
,
RGB
[
1
]
,
RGB
[
2
]
,
color
[
0
]
,
color
[
1
]
,
color
[
2
]
)
;
color
[
0
]
+=
2.0f
;
if
(
color
[
0
]
>=
360.0f
)
color
[
0
]
-=
360.0f
;
bTact
=
false
;
}
pDevice
->
SetPixelShaderConstantF
(
0
,
RGB
,
1
)
;
fpHkDrawIndexedPrimitive
(
pDevice
,
Type
,
BaseVertexIndex
,
MinVertexIndex
,
NumVertices
,
startIndex
,
primCount
)
;
pDevice
->
SetPixelShader
(
nullptr
)
;
return
D3D_OK
;
а может знаешь пайплайн рендера авто?
|
|
|

28.08.2021, 18:26
|
|
Постоянный
Регистрация: 24.07.2017
Сообщений: 867
С нами:
4633764
Репутация:
148
|
|
всем привет, я столкнулся с прикольной проблемой, она заключается в том, что ИНОГДА std::vector при emplace_back у меня выбивает исключение this = nullptr
код класса
C++:
Код:
class
RenderClass
{
public
:
bool
m_bIsEnabled
{
false
}
;
// визуалка 2019 показывает ошибку тут
std
::
string m_sName
{
""
}
;
private
:
std
::
vector
m_objectsRenders
;
std
::
vector
m_text3dRenders
;
std
::
vector
m_pickupRenders
;
public
:
RenderClass
(
)
;
RenderClass
(
const
char
*
szName
)
;
void
ReadWrite
(
READ_WRITE_PARAMS
)
;
bool
areAnyObjectRendersEnabled
(
)
;
bool
areAnyickupRendersEnabled
(
)
;
bool
areAnyText3DRendersEnabled
(
)
;
void
renderPickups
(
RenderPickup_ObjectData
*
pRenderPickupData
)
;
void
renderObjects
(
RenderPickup_ObjectData
*
pRenderObjectData
)
;
void
render3DTexts
(
Render3DTextData
*
p3DTextData
)
;
void
drawEditor
(
size_t spl
)
;
void
drawMenu
(
size_t i
)
;
}
;
Код с самим emplace_back()
C++:
[CODE]
void
CustomRender
::
ReadWrite
(
READ_WRITE_PARAMS
)
{
using
namespace
std
::
chrono_literals
;
try
{
FIELD_IV4
(
customRenderData
.
vec4Color
)
;
FIELD
(
customRenderData
.
bDrawLine
)
;
FIELD
(
customRenderData
.
m_fFontScale
)
;
FIELD
(
m_bEnabled
)
;
if
(
bRead
)
{
size_t i
=
0
;
while
(
true
)
{
if
(
data
[
"class"
]
[
std
::
to_string
(
i
)
.
c_str
(
)
]
.
is_null
(
)
)
break
;
auto
&&
renderClass
=
m_classes
.
emplace_back
(
)
;
// вот тут ошибка
renderClass
.
ReadWrite
(
data
[
"class"
]
[
std
::
to_string
(
i
)
.
c_str
(
)
]
,
bRead
)
;
i
++
;
}
}
else
{
for
(
size_t i
=
0
;
i
|
|
|

28.08.2021, 18:33
|
|
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами:
4483143
Репутация:
183
|
|
[QUOTE="loganhackerdff"]
всем привет, я столкнулся с прикольной проблемой, она заключается в том, что ИНОГДА std::vector при emplace_back у меня выбивает исключение this = nullptr
код класса
C++:
Код:
class
RenderClass
{
public
:
bool
m_bIsEnabled
{
false
}
;
// визуалка 2019 показывает ошибку тут
std
::
string m_sName
{
""
}
;
private
:
std
::
vector
m_objectsRenders
;
std
::
vector
m_text3dRenders
;
std
::
vector
m_pickupRenders
;
public
:
RenderClass
(
)
;
RenderClass
(
const
char
*
szName
)
;
void
ReadWrite
(
READ_WRITE_PARAMS
)
;
bool
areAnyObjectRendersEnabled
(
)
;
bool
areAnyickupRendersEnabled
(
)
;
bool
areAnyText3DRendersEnabled
(
)
;
void
renderPickups
(
RenderPickup_ObjectData
*
pRenderPickupData
)
;
void
renderObjects
(
RenderPickup_ObjectData
*
pRenderObjectData
)
;
void
render3DTexts
(
Render3DTextData
*
p3DTextData
)
;
void
drawEditor
(
size_t spl
)
;
void
drawMenu
(
size_t i
)
;
}
;
Код с самим emplace_back()
C++:
[CODE]
void
CustomRender
::
ReadWrite
(
READ_WRITE_PARAMS
)
{
using
namespace
std
::
chrono_literals
;
try
{
FIELD_IV4
(
customRenderData
.
vec4Color
)
;
FIELD
(
customRenderData
.
bDrawLine
)
;
FIELD
(
customRenderData
.
m_fFontScale
)
;
FIELD
(
m_bEnabled
)
;
if
(
bRead
)
{
size_t i
=
0
;
while
(
true
)
{
if
(
data
[
"class"
]
[
std
::
to_string
(
i
)
.
c_str
(
)
]
.
is_null
(
)
)
break
;
auto
&&
renderClass
=
m_classes
.
emplace_back
(
)
;
// вот тут ошибка
renderClass
.
ReadWrite
(
data
[
"class"
]
[
std
::
to_string
(
i
)
.
c_str
(
)
]
,
bRead
)
;
i
++
;
}
}
else
{
for
(
size_t i
=
0
;
i
|
|
|

28.08.2021, 18:33
|
|
Флудер
Регистрация: 18.03.2013
Сообщений: 4,080
С нами:
6921957
Репутация:
183
|
|
А зачем 2 &&? Один вроде нужен. Да и лучше обращаться к елементам контейнеров через at и попробуй еще в try catch взять код и посмотреть, что за ошибку выдает.
|
|
|

28.08.2021, 18:36
|
|
Постоянный
Регистрация: 24.07.2017
Сообщений: 867
С нами:
4633764
Репутация:
148
|
|
Сообщение от kin4stat
Ну как минимум emlace_back возвращает lvalue reference, а у тебя auto&&, который rvalue reference
Сообщение от Dark_Knight
А зачем 2 &&? Один вроде нужен. Да и лучше обращаться к елементам контейнеров через at и попробуй еще в try catch взять код и посмотреть, что за ошибку выдает.
всё равно выбивает, в консоль не выводиться сообщение о исключении, не доходит до него(я не забыл добавить)
|
|
|

28.08.2021, 18:37
|
|
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами:
4483143
Репутация:
183
|
|
Сообщение от Dark_Knight
try catch взять код и посмотреть, что за ошибку выдает.
try catch не ловит сегфолты
|
|
|

28.08.2021, 18:38
|
|
Постоянный
Регистрация: 24.07.2017
Сообщений: 867
С нами:
4633764
Репутация:
148
|
|
так похоже что выбивает только при отладке в визуал студии
или просто намного чаще
|
|
|

28.08.2021, 18:40
|
|
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами:
4483143
Репутация:
183
|
|
Сообщение от loganhackerdff
так похоже что выбивает только при отладке в визуал студии
или просто намного чаще
попробуй добавить
RenderClass(RenderClass&) = default;
RenderClass(RenderClass&&) = default;
|
|
|

28.08.2021, 18:53
|
|
Постоянный
Регистрация: 24.07.2017
Сообщений: 867
С нами:
4633764
Репутация:
148
|
|
cпс пацаны, замена && на & помогла, странно, у меня почти везде auto&& было написано, заменил, а с
RenderClass(RenderClass&) = default;
RenderClass(RenderClass&&) = default;
вообще не компилилось, даже по одной
А нет не помогла
|
|
|

28.08.2021, 19:19
|
|
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами:
4483143
Репутация:
183
|
|
Сообщение от loganhackerdff
RenderClass(RenderClass&) = default;
RenderClass(RenderClass&&) = default;
Их надо в паблик область видимости, внутрь класса RenderClass(надеюсь ты также пробовал)
И еще: C++17 стоит?
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|