小编Vik*_*xén的帖子

如何初始化 std::unique_ptr<std::unique_ptr<T>[]>?

我的班级有这个成员:

static std::unique_ptr<std::unique_ptr<ICommand>[]> changestatecommands;
Run Code Online (Sandbox Code Playgroud)

我找不到初始化它的正确方法。我希望数组被初始化,但元素未初始化,所以我可以随时编写如下内容:

changestatecommands[i] = std::make_unique<ICommand>();
Run Code Online (Sandbox Code Playgroud)

数组是在声明时立即初始化还是在运行时稍后初始化都没有关系。最理想的是,我想知道如何做到这两点。

c++ smart-pointers unique-ptr data-structures c++14

3
推荐指数
1
解决办法
149
查看次数

在动态创建指针数组时,Visual Studio不显示完整数组

我的代码:

#include "pch.h"
#include <iostream>

using namespace std;

   int main()
   {
      char** pptr = new char*[5];

      for (int i = 0; i < 5; i++)
      pptr[i] = new char[5];
   }
Run Code Online (Sandbox Code Playgroud)

我想要发生的是,pptr现在指向一个5个指针数组的开头,每个指针都指向一个包含5个字符的数组的开头.

我在main函数的末尾加了一个断点并添加pptr到watch中,它只存储一个指针.为什么会发生这种情况,我该如何正确地做到这一点?

在此输入图像描述

c++ debugging pointers visual-studio

2
推荐指数
1
解决办法
74
查看次数

当由 glUniformMatrix4fv 创建时,统一 mat4 具有未知值

我有一个基于 OpenGL 的非常基本的引擎,可以将任何颜色的多边形渲染到可调整大小的窗口。我现在正在尝试通过我的着色器将模型、透视和视图矩阵作为统一体来为我的着色器实现矩阵。在添加制服之前,一切正常,我什vec2至可以传入制服来模拟鼠标位置处的光源。制服mat4s 的效果不如vec2s。

出于调试目的,我只渲染了一个以屏幕为中心的黄色方块。当不使用制服时,方块会按预期显示。我现在尝试传入一个mat4,设置为单位矩阵。在顶点着色器中,我乘以gl_Position我统一的单位矩阵。当我运行程序时,它只显示一个黑色窗口。

我尝试在顶点着色器中手动创建一个单位矩阵并乘以gl_Position该矩阵而不是统一矩阵。当我这样做时,我的黄色方块显示正常。这让我相信制服mat4没有得到正确的值,但是,我不知道在着色器中使用矩阵时如何检查它的值。

这是我的顶点着色器的外观:

#version 430 core

layout (location = 0) in vec3 position;
layout (location = 1) in vec4 color;

out vec4 Color;

uniform mat4 model;
uniform mat4 view;
uniform mat4 project;

void main()
{
    mat4 id;
    id[0] = vec4(1.0, 0.0, 0.0, 0.0);
    id[1] = vec4(0.0, 1.0, 0.0, 0.0);
    id[2] = vec4(0.0, 0.0, 1.0, 0.0);
    id[3] = vec4(0.0, 0.0, 0.0, 1.0);
    Color …
Run Code Online (Sandbox Code Playgroud)

c++ opengl shader glsl glm-math

2
推荐指数
1
解决办法
642
查看次数