小编Tor*_*gen的帖子

Vala vapi文件文档

我想使用Vala破解现有的基于GLib的C项目.

基本上我正在做的是,在我的构建过程开始时,使用valac从我的.vala文件生成.c和.h文件,然后按照我任何.c或.h文件的方式编译生成的文件.

这可能不是最好的方式,但似乎在大多数情况下工作正常.

我的问题是我很难从Vala代码访问现有的C代码.是否有捷径可寻?

我已经尝试编写自己的.vapi文件(我对vala附带的工具没有任何好运),但我找不到任何关于如何编写这些文件的体面文档.

有没有?我是否需要其中一个文件来调用现有的C代码?

c glib vala vapi

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

boost :: asio :: buffer:获取缓冲区大小并防止缓冲区溢出?

我有以下两个用于发送和接收数据包的功能.

void send(std::string protocol)
{
    char *request=new char[protocol.size()+1];
    request[protocol.size()] = 0;
    memcpy(request,protocol.c_str(),protocol.size());

    request_length = std::strlen(request);
    boost::asio::write(s, boost::asio::buffer(request, request_length));
}
void receive()
{
    char reply[max_length];
    size_t reply_length = boost::asio::read(s, boost::asio::buffer(reply, request_length));
    std::cout << "Reply is: ";
    std::cout.write(reply, reply_length);
    std::cout << "\n";
}
Run Code Online (Sandbox Code Playgroud)

问题与此部分有关,boost::asio::buffer(reply, request_length)其中请求长度是在发送数据包时最初设置的字符串的长度.如何在不知情的情况下检查缓冲区的大小request_length?另一个问题是如何防止缓冲区溢出?

c++ buffer-overflow boost-asio

8
推荐指数
2
解决办法
2万
查看次数

Texture的内部格式

看看下面的OpenGL函数:

void glTexImage2D(GLenum    target,
                  GLint     level,
                  GLint     internalFormat,
                  GLsizei   width,
                  GLsizei   height,
                  GLint     border,
                  GLenum    format,
                  GLenum    type,
                  const GLvoid * data);
Run Code Online (Sandbox Code Playgroud)

我知道参数格式和类型描述了图像数据的格式和类型,但是我不了解参数internalFormat.我应该如何在我的应用程序中设置它的值?

例如,我创建一个这样的纹理:

glTexImage2D(GL_TEXTURE_2D,0,GL_LUMINANCE8,size,size,0,GL_LUMINANCE,GL_UNSIGNED_BYTE,buffer);
Run Code Online (Sandbox Code Playgroud)

当我在我的GLSL着色器中使用它的纹理时,我得到的值似乎在[0,1] .WHy之间?它不应该在[0,255]之间吗?

我的着色器代码的一部分是:

vec = EntryPoint + delta_dir * texture(noiseTex,EntryPoint.xy * 32).x;
Run Code Online (Sandbox Code Playgroud)

我的C++代码的一部分:

for (int i = 0;i < temp;++i)
    {
        buffer[i] = 255.0 * rand() / (float)RAND_MAX;
    }
    glGenTextures(1,&noiseTex);
    glActiveTexture(GL_TEXTURE0 + activeTexUnit);
    glBindTexture(GL_TEXTURE_2D,noiseTex);
    glTexImage2D(GL_TEXTURE_2D,0,GL_LUMINANCE8,size,size,
                            0,GL_LUMINANCE,GL_UNSIGNED_BYTE,buffer);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
Run Code Online (Sandbox Code Playgroud)

opengl graphics

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

标签 统计

boost-asio ×1

buffer-overflow ×1

c ×1

c++ ×1

glib ×1

graphics ×1

opengl ×1

vala ×1

vapi ×1