我正在使用Syphon框架为客户端提供视频帧。我需要使用一行代码来通过服务器为框架服务,而我只能尝试将其写入我的c++代码中。
Syphon文档这里给出了这个示例:
[myServer publishFrameTexture:myTex textureTarget:GL_TEXTURE_RECTANGLE_EXT imageRegion:NSMakeRect(0, 0, width, height) textureDimensions:NSMakeSize(width, height) flipped:NO];我如何将它合并到我的c++头中?我已经设置了xcode编译器标志,以便将“其他C标志”设置为"-x目标-c“,将”其他C++标志“设置为"-x目标-c++”。
为了给出一些上下文,我的代码的其余部分现在看起来如下(以及它构建):
class OpencvMat2Syphon {
// hack to call glut to create opengl context (one only so they don't wipe out each other)
static bool haveGLContext;
uint texId;
CGLContextObj ctx;
static SyphonServer *syphonServer;
public:
OpencvMat2Syphon() {
if (!haveGLContext) {
char* str[1]; // glut hack for faking passing CLI parameters from main
int argc = 1;
str[0] = "app";
glutInit(&argc, str);
glutCreateWindow("imageGrabber");
glutDisplayFunc([]{});
glutHideWindow();
haveGLContext = true;
}
ctx = CGLGetCurrentContext();
std::cout << "cgl context: " << ctx << std::endl;
SyphonServer *syphonServer = [[SyphonServer alloc] initWithName:@"imageGrabberOutput" context:ctx options:nil];
glGenTextures(1, &texId);
glBindTexture(GL_TEXTURE_2D, texId);
glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
}
~OpencvMat2Syphon() {
glDeleteTextures(1, &texId);
}
uint getTexId() {
return texId;
}
void uploadTexture(cv::Mat mat) {
glBindTexture(GL_TEXTURE_2D, texId);
// can do swizzling/channel-flipping here? see https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glTexImage2D.xhtml
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, mat.cols, mat.rows, 0, GL_RGB, GL_UNSIGNED_BYTE, mat.data);
// ?? [syphonServer publishFrameTexture:texId textureTarget:GL_TEXTURE_2D imageRegion:NSMakeRect(0, 0, 1280, 720) textureDimensions:NSMakeSize(1280, 720) flipped:NO];
}
};
bool OpencvMat2Syphon::haveGLContext = false;发布于 2017-09-26 21:01:28
你能把它算出来吗?一个非常简单的方法是:
syphonServer调用的普通C签名的函数;如果您可以将包含头的文件重命名为.mm,那么这也将达到预期的结果,即说服编译器将您的文件(以及它的头)视为目标-C++。
https://stackoverflow.com/questions/46433979
复制相似问题