在C 标题中纳入OBJC线
incorporating a line of objC in C++ header
我正在使用Siphon框架将视频帧提供给客户端。我需要使用一行代码来通过服务器使用帧,我被困在试图将其写入我的C 代码中。
这里的虹吸文档给出了此示例:
[myServer publishFrameTexture:myTex textureTarget:GL_TEXTURE_RECTANGLE_EXT imageRegion:NSMakeRect(0, 0, width, height) textureDimensions:NSMakeSize(width, height) flipped:NO];
我如何将其纳入我的C 标题?我已经将Xcode编译器标志设置为"其他C标志"设置为" -x Objective-C"answers"其他C 标志",为" -x Objective-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;
您是否能够将其分解出来?一种非常简单的方法是:
- 写一个具有普通c签名的函数,该函数执行
syphonServer
调用; - 将该功能的声明放入普通的C标头文件中;
- 将该函数的实现放入包含标题的Objective-C文件中;
- 从您的C 类调用C函数。
如果您可以重命名包含标题为.mm的文件,则还可以实现说服编译器将您的文件(并通过扩展程序)视为Objection-C 的所需结果。
。相关文章:
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- 对于C++,方括号中的标题必须总是在引号中的标题之上吗
- 库标题在标题中不可见,但在 cmake build 下.cpp文件中完全可见.为什么?
- 为什么我不应该把所有东西都放在标题中?
- WinAPI 检查窗口是否具有常规标题栏
- 如何更改窗体上所有控件的标题?[C++生成器]
- 提升用于解析标题列的精神语法
- 所以我正在为我的学校作业练习继承,但我无法正确实施标题保护
- 如何删除已输入的书以及如何使标题,语言和名称在上面放置空格不会出错?
- 使用类 ?C++ 和 SFML 以及标题中的 15 个字符
- Gtkmm 窗口为空白,不显示任何小部件或标题
- 我将如何在 cpp 中生成一个随机且独特的标题
- std::带有颜色和标题的 clog 包装器无法正确打印整数
- 仅提升计时标题与链接
- 是否有理由在标题中保留完全专用的模板?
- 如何在QGroundControl的标题中放置空格?
- 崇高的林特与叮当在标题中找不到头文件
- C++ - 从 MFC 应用程序启动记事本,并将其默认标题从 "Untitled - Notepad" 更改为其他内容
- 是否可以使C++类成为Objc类的委托
- 在C 标题中纳入OBJC线