在GIT中使用PULL操作更新本地存储库时,我遇到了以下问题.我处理本地文件.然后,一些从远程工作的团队成员将更新后的版本提交给远程主服务器.然后我将其拉出来进行更新和合并用我的本地东西.之后我通常会收到有关冲突等的通知.我确实添加-A,commit -a,当我查看本地文件时,只有我工作的那些,我可以看到像HEAD那样的git数据库元标记>> >>>>>>>>>并且提交号码显示为内联(php类)并使整个文件损坏.我认为它是与权限相关的东西(在UBUNTU上工作).所以我打开了对所有文件的完整权限(chmod -R 777).但仍然得到这个问题.再一次,它只发生在我修改过的那些本地文件.用GIT和Linux做一个菜鸟会很感激有关该主题的任何有用的输入.谢谢.
我对 C++ 比较陌生,一直在使用 OpenGL 开发基本的 3D 渲染引擎。我有以下问题:我有一个名为 GeomEntity 的类,它是所有几何基元的基类。我有另一个名为 DefaultMaterial 的类,它是所有材质的基类(由不同类型的着色器程序组成)。因为我将拥有多种类型的材质,例如:ColorMaterial、TextureMaterial、AnimatedMaterial 等,我需要在 GeomEntity 类中放置对材质的引用,以便从主应用程序我可以使用此功能设置任何材料:
void GeomEntity ::addMaterial (const DefaultMaterial *mat){
material=mat;////material is the member variable pointer of type DefaultMaterial
}
Run Code Online (Sandbox Code Playgroud)
但问题是,虽然所有这些材质都派生自 DefaultMaterial,但它们都有自己独特的方法,如果我默认将它们引用到 DefaultMaterial 变量,则无法触发这些方法。例如在主应用程序中:
Sphere sphere;
....
sphere.addMaterial(&animMaterial);///of type AnimatedMaterial
sphere.material->interpolateColor(timerSinceStart);
///doesn't happen anything as the sphere.material is
/// of type DefaultMaterial that has no interpolateColor() method
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用模板或强制转换,但我想听听 C++ 中这种多态性的最佳实践。在 Java 或 C# 中,我真的会使用这样的东西:
((AnimatedMaterial)sphere.material).interpolateColor(timerSinceStart);
Run Code Online (Sandbox Code Playgroud) 我有以下情况.我有一个Java中的HashMap,键作为字符串.然后在某个阶段,在运行时我创建等于这些键的字符串,以便从该映射中检索数据.字符串在"for"循环中如下创建:
String keyToRetrive = "lights[" + Integer.toString(i) + "]" + ".Intensity";
Run Code Online (Sandbox Code Playgroud)
关于它的奇怪的事情,当我通过地图迭代找到等于该字符串,即使找到匹配的搜索步骤over.So在该搜索循环的关键:
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
if (name == entry.getKey()) { ///name- "lights[0].Intesity"
uniformOut = (ICleanable) entry.getValue();
break;
}
}
Run Code Online (Sandbox Code Playgroud)
具有名称"lights [0] .Intesity"的键永远不会返回true,即使地图包含一个.我如何解决它.我使用hashCode()来比较两个字符串值.所以这个版本确实有效:
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
if (name.hashCode() == entry.getKey().hashCode()) {
uniformOut = (ICleanable) entry.getValue();
break;
}
}
Run Code Online (Sandbox Code Playgroud)
更新:在指出"=="不能正常工作并且应该使用"equals()"的事实后,我想缩小这个问题:为什么"=="适用于不是由几个创建的字符串连接块?我的意思是,如果我定义键字符串再次比较为一个简单的单个字符串:
String foo="foo";
Run Code Online (Sandbox Code Playgroud)
这样的字符串可以使用"=="与HashMap键进行比较.
我不是专业的Java程序员,所以任何人都可以解释为什么它这样工作?
我需要将以下 Java 概念移植到 C++ 中:
持有对象 id 键和类类型值的哈希映射:
Map<String, Class> _objectsBank = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)
在 init 方法的某个地方,我像这样填充银行:
_objectsBank .put("CLASS_ID_1", MyClass1.class);
_objectsBank .put("CLASS_ID_2", MyClass2.class);
....
Run Code Online (Sandbox Code Playgroud)
然后,稍后,我根据需要构造了保存在该银行中的类之一的实例。一种“懒惰”的初始化:
private MyClass initNewProg(String name) {
MyClass instance;
try {
Class cl = _objectsBank.get(name);
java.lang.reflect.Constructor co = cl.getConstructor(String.class);
instance= (MyClass) co.newInstance(name);
return instance;
} catch (NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e)
{
e.printStackTrace();
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
我将如何在 C++ 中做到这一点?如何将类类型设置为 std::map 值,以便稍后查询以从中构造适当的实例?Boost 库中有这样的东西吗?
我一直在使用几个自定义FBO.FBO-A附有MSAA纹理,其中几何体被渲染.然后通过将FBO-A的MSAA纹理附件blit到FBO-B的常规tex 2d附件来解决.这个过程意味着在多个FBO之间进行切换,并在几个中说明相反,在不同的FBO之间切换附件之间的性能更明智.我试图设置MSAA纹理和附加到同一个FBO的常规纹理.但我发现我无法通过blitting做出决心.如果我从MSAA到常规纹理副本进行纹理复制,MSAA是否会像blitting一样被解决?
更新:
对于那些有兴趣知道在一个FBO中使用几个FBO和几个附件是否值得(性能明智)的人.我刚做了一个测试(NVidia Quadro 4000),结果是完全相同的FPS(+ = 15-20帧).但可能是硬件和OGL实现依赖.
我遇到了以下问题.我有两个着色器(完全不相关),它们会转换为int并以不同的方式浮动.
从着色器#1(int到float)演示示例:
color = vec4(float(fragment_count) / float(MAX_FRAGMENTS));
Run Code Online (Sandbox Code Playgroud)
从Shader#2(float到int)演示示例:
int abNumFrag=(int)imageLoad(abufferCounterImg, coords).r;
Run Code Online (Sandbox Code Playgroud)
第一个着色器编译正常,但第二个着色器抛出错误:
"OpenGL不允许使用C-syle演员"
除非我启用扩展名:#extension GL_NV_gpu_shader5:enable
some(int)someFloat与cast int(someFloat)不一样吗?
我可能在这里遗漏了一些东西.我需要存储新分配的内存块的指针地址.
我这样做:
void* buffer = _aligned_malloc(4096,4);
assert(buffer);
//save its original address:
void* initialAddress = (void*) std::addressof(buffer );
Run Code Online (Sandbox Code Playgroud)
initialAddress保存的地址与缓冲区的地址不同.
只有当我分配缓冲区指针时,我才能获得相同的地址(这当然是正确的事情):
initialAddress = buffer;
Run Code Online (Sandbox Code Playgroud)
那么,为什么std :: addressof(缓冲区)显示不同的地址?我正在使用VS2012进行调试.可能是指针的地址而不是缓冲区的地址?
我有一个由 8 个顶点组成的盒子,可以在任何方向上缩放或旋转,所以我对每个变换的顶点应用变换矩阵,我在 X、Y 和 Z 上从中心有中心、大小和方向,我如何检查盒子内有任何 3D 点吗?