我想以某种格式显示当前时间.
我试图避免时间箱,因为它被标记为在GitHub仓库中被弃用.
我想利用这个确切的格式time::now().strftime("%Y-%m-%d][%H:%M:%S").unwrap()使用std::time,但它似乎并不具有strftime.
我正在设计一个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) 对于我的一个项目,我需要使用可变参数模板.一切都运作良好,除了参数的解包.
这是电话
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) 对于我的一个项目,我使用的是 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) 今天,在第一次使用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) 我正在编写一个基本的二叉树结构,我想显示一个节点.似乎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的新手,为了练习,我正在构建一个简单的通用二叉树.这就是我在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)