小编bl4*_*0ne的帖子

格式化std :: time输出

我想以某种格式显示当前时间.

我试图避免时间箱,因为它被标记为在GitHub仓库中被弃用.

我想利用这个确切的格式time::now().strftime("%Y-%m-%d][%H:%M:%S").unwrap()使用std::time,但它似乎并不具有strftime.

time rust

9
推荐指数
3
解决办法
5909
查看次数

检查sampler2D是否为空

我正在设计一个sprite类,并且如果没有纹理加载,我只想显示一种颜色。

这是我的顶点着色器

#version 330 core
layout (location = 0) in vec4 vertex; // <vec2 pos, vec2 tex>

out vec2 vs_tex_coords;

uniform mat4 model;
uniform mat4 projection;

void main()
{
    vs_tex_coords = vertex.zw;
    gl_Position = projection * model * vec4(vertex.xy, 0.0, 1.0);
}
Run Code Online (Sandbox Code Playgroud)

和片段着色器:

#version 330 core

in vec2 vs_tex_coords;

out vec4 fs_color;

uniform sampler2D image;
uniform vec3 sprite_color;

void main()
{
    fs_color = vec4(sprite_color, 1.0) * texture(image, vs_tex_coords);
} 
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果不绑定纹理,它将仅显示黑色精灵。我认为问题在于片段着色器中的纹理函数返回0,然后拧紧所有公式。

有没有办法知道sampler2D是否未初始化或为null,而仅返回sprite_color?

解:

解决方案是生成一个空的1x1纹理并以任何方式绑定它。为此,您必须创建一个4个字符的数组,最多255个字符(对于RGBA),并为glTexImage2D函数指定1x1的大小,以确保将创建1x1纹理。

Texture::Texture()
{
    glGenTextures(1, &ID);

    GLubyte …
Run Code Online (Sandbox Code Playgroud)

opengl glsl

5
推荐指数
1
解决办法
5055
查看次数

从variadic模板解包参数

对于我的一个项目,我需要使用可变参数模板.一切都运作良好,除了参数的解包.

这是电话

Shader<GL_VERTEX_SHADER> vert(vertexShaderSource);
Shader<GL_FRAGMENT_SHADER> frag(fragmentShaderSource);
Program prog(vert, frag);
Run Code Online (Sandbox Code Playgroud)

以及导致问题的类

class Program
{
    public:
        template <class... Args>
        Program(Args... args) :
            program_(glCreateProgram())
        {         
            auto shaders {{args...}};

            std::for_each(shaders.begin(), shaders.end(), [this](auto s)       
            {
                std::cout << "glAttachShader\n";
                glAttachShader(program_, s.get_shader());
            });
        }
};
Run Code Online (Sandbox Code Playgroud)

而错误

fatal error: cannot deduce type for variable 'shaders' with type 'auto' from nested initializer list
    auto shaders {{args...}};
Run Code Online (Sandbox Code Playgroud)

我尝试了几件事,比如

auto shaders = {args...};
auto shaders = {{args...}};
auto shaders {args...};    
Run Code Online (Sandbox Code Playgroud)

但没有任何作用.

这是Shader类,以防万一

template <GLenum type>
class Shader
{
    public:
        Shader(std::string const …
Run Code Online (Sandbox Code Playgroud)

c++ templates

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

使用 lambda 作为 GLFWkeyfun

对于我的一个项目,我使用的是 GLFW3。我正在尝试为函数GLFWSetKeyCallback提供 C++11 lambda,该函数将 GFLWwindow 和 GLFWfunkey 函数作为参数,该函数是 void(* GLFWkeyfun) (GLFWwindow *, int, int, int, int) 的 typedef )。

该函数是从我的 Window 类调用的,这是代码

窗口.hpp

class Window
{
        public:
                Window(GLuint width, GLuint height, std::string title);
                ~Window();

                GLFWwindow* get() { return window_.get(); }
                bool is_open() { return open_; };
                void close();

        private:
                bool open_ = false;
                std::unique_ptr<GLFWwindow, DestroyWindow> window_;
                std::vector<Drawable*> drawables_;
};
Run Code Online (Sandbox Code Playgroud)

和window.cpp

#include <pck/window.hpp>

Window::Window(GLuint width, GLuint height, std::string title) :
        open_(true)
{
        window_.reset(glfwCreateWindow(width, height, title.c_str(), nullptr, nullptr));
    glfwMakeContextCurrent(window_.get());

        Global::width …
Run Code Online (Sandbox Code Playgroud)

c++ lambda c++11

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

为什么我的数组声明为引用数组

今天,在第一次使用GCC 4.9.2编译某些代码时,我遇到了一个奇怪的错误,即数组被解释为引用数组.

我能用一个简单的例子重现错误.为什么Link解释的构造函数是构造函数中buses的引用数组Stuff.

以下代码适用于MSVC10和ICC 11.1

#include <iostream>

struct Bus
{
    Bus(std::string n) : name(n) {}
    std::string name;
};

template<typename T>
class Link
{
public:
    Link(const T* i)
    {
        data = (T*)i;   
    }

    const T* get() const
    {
        return data;
    }
private:
    T* data = nullptr;  
};

class Stuff
{
public:
    Stuff(Link<Bus> l_b) : link(l_b) {}
private:
    Link<Bus> link;
};

void print(Link<Bus> l)
{
    std::cout << l.get()->name << '\n';   
}

int main(void) {
    Bus buses[4] …
Run Code Online (Sandbox Code Playgroud)

c++ arrays pointers

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

不满足特征绑定`T:std :: fmt :: Display`

我正在编写一个基本的二叉树结构,我想显示一个节点.似乎Rust在显示泛型类型时遇到问题,我收到此错误:

error[E0277]: the trait bound `T: std::fmt::Display` is not satisfied
  --> src/main.rs:55:60
   |
55 |         write!(f, "Node data: {} left: {:?}, right: {:?}", self.data, self.left, self.right);
   |                                                            ^^^^^^^^^ trait `T: std::fmt::Display` not satisfied
   |
   = help: consider adding a `where T: std::fmt::Display` bound
   = note: required by `std::fmt::Display::fmt`

error[E0277]: the trait bound `T: std::fmt::Display` is not satisfied
  --> src/main.rs:62:60
   |
62 |         write!(f, "Node data: {} left: {:?}, right: {:?}", self.data, self.left, self.right);
   |                                                            ^^^^^^^^^ trait `T: std::fmt::Display` not satisfied …
Run Code Online (Sandbox Code Playgroud)

rust

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

创建可变二叉树时,键入名称T undefined

我是Rust的新手,为了练习,我正在构建一个简单的通用二叉树.这就是我在C++中创建一个的方法

template<typename T>
struct Node
{
    T data;
    Node<T>* parent;
    Node<T>* left;
    Node<T>* right;
};

template<typename T>
struct Bintree
{
    Node<T>* root;  
};
Run Code Online (Sandbox Code Playgroud)

但Rust中的相同(ish)代码似乎不起作用:

use std::ptr;

struct Node<T> {
    data: T,
    left: &Node<T>,
    right: &Node<T>,
    parent: &Node<T>,
}

struct Tree<T> {
    root: &Node<T>,
}

impl Tree<T> {
    pub fn new() -> Tree<T> {
        Tree { root: ptr::null() }
    }

    pub fn insert(&self, value: T) {
        if root.is_null() {
            self.root = Node {
                data: value,
                left: ptr::null(),
                right: ptr::null(),
                parent: ptr::null(), …
Run Code Online (Sandbox Code Playgroud)

tree binary-tree pointers rust data-structures

-1
推荐指数
1
解决办法
233
查看次数

标签 统计

c++ ×3

rust ×3

pointers ×2

arrays ×1

binary-tree ×1

c++11 ×1

data-structures ×1

glsl ×1

lambda ×1

opengl ×1

templates ×1

time ×1

tree ×1